![]() |
WinExecAndWait32 wartet nicht
Hallo #,
ich habe hier eine Variante von WinExecAndWait32. Das darin gestartete Programm1 ruft über ShellExecute (?) Programm2 auf und beendet sich. Nach der Beendigung von Programm1 bekomme ich die Kontrolle von WinExecAndWait32 zurück. In der Zwischenzeit läuft aber Programm2 weiter. Wie bekomme ich es hin, dass ich warte, bis auch Programm2 beendet ist. Hier der Code
Delphi-Quellcode:
function Run_EXE(Params: string; var ExitCode: Cardinal;
ShowMinimized: boolean): Boolean; var //True wenn exe gelaufen, unabhängig vom ExitCode SI: TStartupInfo; PI: TProcessInformation; begin fillchar(SI, SizeOf(SI), 0); SI.cb := SizeOf(SI); SI.dwFlags := STARTF_USESHOWWINDOW; if ShowMinimized then SI.wShowWindow := SW_SHOWMINIMIZED else SI.wShowWindow := SW_SHOWNORMAL; if CreateProcess(nil, PChar(Params), nil, nil, false, CREATE_DEFAULT_ERROR_MODE and HIGH_PRIORITY_CLASS, nil, nil, SI, PI) then begin //backup läuft while (waitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT) do Application.ProcessMessages; GetExitCodeProcess(PI.hProcess, ExitCode); CloseHandle(PI.hThread); CloseHandle(PI.hProcess); Result := True; end //backup läuft else begin //CreateProcess fehlgeschlagen // error message Result := False; end; end; Danke Heiko |
AW: WinExecAndWait32 wartet nicht
Hallo,
Du brauchst hProcess von Programm2. Das bekommst Du mit GetWindowThreadProcessId, aber nur wenn Du ein Festerhandle hast. Ansonsten mit CreateToolhelp32Snapshot, Process32First und Process32Next durch alle Prozesse gehen und Dir Deinen von Programm2 rauspicken. Der Rest geht mit waitForSingleObject wie in Deinem Code. |
AW: WinExecAndWait32 wartet nicht
Hallo,
ist ja leider nicht mein Programm2. Das ist das Uninstall-Programm von Wise (einer uralten Version). Den erzeugte Prozess über vergleichen rausfinden, ist wohl ziemlich ungenau ... Heiko |
AW: WinExecAndWait32 wartet nicht
Beim Erstellen/Laden von Programm1 die Funktion hooken, welche das Programm2 startet und sich dort das Handle von Programm2 auslesen.
Oder Eben doch das Handle von Programm1 nehmen und nachträglichg schauen welches Programm von diesem gestartet wurde. Irgendwo in den SnapShots sollte drinstehn, welches das startende Programm war. |
AW: WinExecAndWait32 wartet nicht
@Hoika: Weißt Du welchen Namen das Programm2 hat? Bei Wise hab ich keine Ahnung, aber beim alten Installshield hat die Setup.exe für den eigentlichen Installer fast immer den gleichen Namen erzeugt (mit wenigen Ausnahmen).
|
AW: WinExecAndWait32 wartet nicht
Hallo,
das Programm hat erst mal Pause. Aber das mit dem Namen ist eine gute Idee. Der Prozess ist immer der gleiche. Wenn etwas Zeit ist, setze ich mich da mal ran. Danke Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz