Ich bin gerade an etwas ähnlichem dran. Das kannst du mit CreateProcess recht einfach gestalten.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; ExitCode: DWORD; begin ZeroMemory(@StartupInfo, SizeOf(StartupInfo)); StartupInfo.cb := SizeOf(StartupInfo);
CreateProcess(nil, 'Anwendung 1', nil, nil, True, DETACHED_PROCESS, nil, nil, StartupInfo, ProcessInfo); repeat GetExitCodeProcess(ProcessInfo.hProcess, ExitCode); Sleep(1); until ExitCode <> STILL_ACTIVE;
CreateProcess(nil, 'Anwendung 2', nil, nil, True, DETACHED_PROCESS, nil, nil, StartupInfo, ProcessInfo); repeat GetExitCodeProcess(ProcessInfo.hProcess, ExitCode); Sleep(1); until ExitCode <> STILL_ACTIVE; end; |
So wie es hier ist blockiert die eigene Anwendung so lange bis alle zurückgekehrt sind. Du kannst das ganze auch in einen Thread auslagern oder Prüfst das ganze in einem Timer ab, der dann auch automatisch den nächsten Process anwirft.
Bevor es jemand anderes sagt. Ja es besteht auch die Möglichkeit ein Application.ProcessMessages in die Schleife einzubauen. Aber das halte ich für unsauber. Alleine schon deswegen, weil die Anwendung immer noch in der Methode steckt und vermeindlich wunderbar reagiert sich aber nicht beenden lässt. Sondern erst dann zu geht sobald die Methode beenden wurde. Was mitunter eine ganze Weile später sein dürfte. Nichts desto trotz erfreut sich diese Möglichkeit größter Beliebtheit.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.