1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| function TExecuteCmdThread.RunAndGetExitCode(const CommandLine, Directory: string): Integer;
var
ExitResult: Cardinal;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
StartupInfo.wShowWindow := SW_HIDE;
CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, PChar(Directory), StartupInfo, ProcessInfo);
// Stockage du handle windows afin de pouvoir agir sur le processus
FWinHandle := ProcessInfo.hProcess;
// Attente de la fin du processus
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
// Récupération du code de sortie
GetExitCodeProcess(ProcessInfo.hProcess, ExitResult);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
Result := Integer(ExitResult);
end; |
Partager