Announcement

Collapse
No announcement yet.

WaitForSingleObject und aufgerufenes Programm beenden

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

  • WaitForSingleObject und aufgerufenes Programm beenden

    Hallo,<br><br>ich möchte ein anderes Programm starten und solange warten, bis das dieses andere Programm beendet wurde.<br>Sollte der Benutzer sich dazu entscheiden, dass der ganze Vorgang vorzeitig beendet wird, dann möchte ich die andere Anwendung beenden, dies gelingt mir irgendwie nicht.<br>Der Funktion wird innerhalb von TTestThread.Execute aufgerufen.<br>
    <PRE>
    function StartenTest(sParam : string): Integer;
    var
    aSI : TStartupInfo;
    aPI : TProcessInformation;
    aProc : THandle;
    dwTest: DWORD;
    pc1, pc2: PChar;
    ErrCode, i : integer;
    HS : string;
    begin
    Result := -1;

    FillChar(aSI, SizeOf(aSI), 0);
    aSI.cb := SizeOf(aSI);
    aSI.lpTitle := PChar('');
    aSI.wShowWindow := sw_ShowNormal;

    pc1 := nil;
    pc2 := PChar(fProgPath + 'Project1.exe ' + sParam); // fProgPath -> ExtractFilePath(Application.ExeName)

    if CreateProcess( pc1, pc2, nil, nil, False, NORMAL_PRIORITY_CLASS,
    nil, nil, aSI, aPI) then
    begin
    aProc := aPI.hProcess;
    CloseHandle(aPI.hThread);

    repeat
    dwTest := WaitForSingleObject(aProc, 1000);
    if (dwTest <> Wait_Failed) and (dwTest <> Wait_TimeOut) then
    begin
    GetExitCodeProcess(aProc, dwtest);
    Result := dwTest;
    end;
    if not Terminated then Sleep(200);
    until Terminated or (dwTest <> Wait_TimeOut);

    if Terminated then
    begin
    <b>// Thread.Terminate wurde aufgerufen und jetzt möchte ich das Programm, welches ich gestartet habe beenden</b>
    end;
    CloseHandle(aProc);
    end
    // else
    // Result := GetLastError;
    end; { function StartenTest }
    </PRE>
    Vieleicht hat jemand einen Vorschlag.<br><br>Danke im vorhinein Stephan Hartmann<br><br>PS: Falls die Anwendung korrekt ausgeführt wurde, dann benötige ich den ExitCode.

  • #2
    Hallo Stephan,

    ich habe leider keine Antwort parat, bin aber auch auf ein Problem in Zusammenhang mit WaitForSingleObkect gestossen.

    Wir verwenden eine ähnliche Konstellation, um aus einer Anwendung heraus ein anderes Programm aufzurufen.

    Das ganze läuft bis W2k bestens. Unter XP sieht es plötzlich so aus, dass wenn der Aufruf ein zweitesmal erfolgt, dann plötzlich ein darauffolgender Dialog kurz eingeblendet wird und dann aber sofort wieder geschlossen wird.

    Gruss
    Jürge

    Comment


    • #3
      Hallo Juergen,<br><br>komisch, leider bin ich bis jetzt auch noch nicht weitergekommen. Ab Montag bin ich für 2 Wochen im Urlaub und danach werde ich mich damit nochmal beschäftigen.<br><br>Grüsse Stepha

      Comment

      Working...
      X