AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WinExecAndWait32 wartet nicht

Ein Thema von hoika · begonnen am 18. Aug 2010 · letzter Beitrag vom 19. Aug 2010
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

WinExecAndWait32 wartet nicht

  Alt 18. Aug 2010, 14:09
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von ralfschwalbe
ralfschwalbe

Registriert seit: 19. Jul 2007
Ort: Lichtenstein/Sachsen
133 Beiträge
 
Delphi XE3 Professional
 
#2

AW: WinExecAndWait32 wartet nicht

  Alt 18. Aug 2010, 14:52
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.
Ralf Schwalbe
viele Grüße...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: WinExecAndWait32 wartet nicht

  Alt 18. Aug 2010, 17:42
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#4

AW: WinExecAndWait32 wartet nicht

  Alt 18. Aug 2010, 17:48
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von ralfschwalbe
ralfschwalbe

Registriert seit: 19. Jul 2007
Ort: Lichtenstein/Sachsen
133 Beiträge
 
Delphi XE3 Professional
 
#5

AW: WinExecAndWait32 wartet nicht

  Alt 19. Aug 2010, 08:02
@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).
Ralf Schwalbe
viele Grüße...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: WinExecAndWait32 wartet nicht

  Alt 19. Aug 2010, 08:16
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz