Announcement

Collapse
No announcement yet.

CreateProcess?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CreateProcess?

    Also ich hab ein riesen Problem welches ich unten versuche mal genauer zu erläutern, ich erwarte keine Komplettlösung aber vielleicht ein paar anregungen, wie man sowas löst oder vielleicht hat ja mal jemand das gleich Problem gehabt wie ich?

    Die Situation:
    Mein Delphiprogramm soll es ermöglichen, diverse Programme die per Drag/Drop in eine Listbox gezogen werden zu starten, jedoch dürfen auf keinen Fall alle Programme gleichzeitig starten..!

    Soll ungefähr zu ablaufen nachdem sagen wir mal 3 Programme in der Listbox stehen der Benutzer einen Button klickt soll Programm1 starten, wenn dieses fertig ist Programm2 usw... Nur:

    1. Wie erfahre ich wielange Programm1 läuft bzw. wie wird meine Anwendung informaiert, das Programm1 fertig ist und Programm2 nun gestarted werden kann? Noch ein Problem! Alle Programme werden mit Parametern gestarted!

    2. MeineAnwendung hat noch ne Progressivbar, wäre es möglich diese solange abzudaten solange bis alle Programme durch sind?

    Besten Dank
    M.

  • #2
    Hallo Marc, <br>
    zu dem Punkt 1: bei mir es funktioniert folgendermassen:

    <pre>
    procedure TXXXX.RunPrg;
    var si : TStartUpInfo;
    pi : PROCESS_INFORMATION;
    begin
    FillChar(si,SizeOf(si),#0);
    si.cb:= SizeOf(si);
    si.dwFlags:= 0;
    si.lpReserved:= NIL;
    si.cbReserved2:= 0;
    si.lpReserved2:= NIL;
    si.lpTitle:= NIL;
    si.lpDesktop:= PCHAR(''#0);

    if CreateProcess (NIL, // pointer to name of executable module
    PCHAR(FProgName + #0), // pointer to command line string
    NIL, // pointer to process security attributes
    NIL, // pointer to thread security attributes
    false, // new process inherits handles
    0,// oder CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS, // creation flags
    PCHAR(''#0), // pointer to new environment block
    NIL, // pointer to current directory name
    si, // pointer to STARTUPINFO
    pi) // pointer to PROCESS_INFORMATION
    then begin
    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );
    // Close process and thread handles.
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    end
    else LogMessage(SysErrorMessage(GetLastError),EVENTLOG_ ERROR_TYPE,0,102);
    end;
    </pre>

    WaitForSingleObject( pi.hProcess,<b>INFINITE</b>) wartet, bis der Process endet

    Comment

    Working...
    X