Entwickler-Ecke

Sonstiges (Delphi) - Programme nacheinander ausführen


MKX - Mo 17.10.05 13:33
Titel: Programme nacheinander ausführen
Ich habe mehrere externe Programme (*.exe) in einem Ordner auf der Festplatte, die nacheinander ausgeführt werden sollen. D.h. nachdem das 1. Programm beendet wurde, soll das 2. starten usw.. Wie mache ich das?


Lossy eX - Mo 17.10.05 14:26

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'nilnil, True, DETACHED_PROCESS, nilnil, StartupInfo, ProcessInfo);
  repeat
    GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
    Sleep(1);
  until ExitCode <> STILL_ACTIVE;

  CreateProcess(nil'Anwendung 2'nilnil, True, DETACHED_PROCESS, nilnil, 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.


retnyg - Mo 17.10.05 15:00

da gäbe es auch noch ein Suche im MSDN WAITFORSINGLEOBJECT