Добрый день,
Так у Вас все останавливается на WaitforSingleObject(hProcess, INFINITE); после того как Вы вызвали функцию первый раз. Второе приложение не будет запущено пока не завершится первое.
Как дополнение, попробуйте эту функцию:
function ExecuteApplication(ACmd: string; AWaitForTerminate: boolean=false; AHideWindow: boolean = false): THandle;
var
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
begin
Result:=0;
try
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW;
if AHideWindow then si.wShowWindow := SW_HIDE else si.wShowWindow := SW_SHOW;
if not CreateProcess(nil, PChar(ACmd), nil, nil, False, 0, nil, nil, si, pi)
then begin
Exit;
end;
Result:=pi.hProcess;
if AWaitForTerminate
then begin
WaitForSingleObject(pi.hProcess, INFINITE );
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
except
end;
end;
И для отладки - проверяйте что содержится в переменной ACmd. Т.е. если Ваш путь к EXEшке и аргументы содержат пробелы, то путь к приложению и каждый такой параметр должны быть заключены в кавычки
Успехов!