![]() |
WinExecAndWait Problem
Hi,
ich hab da folgendes Problem, ich versuche gerade eine Listbox zu füllen (Multiselect = True) Die Listbox enthält diverse Programme (ermittelt via SearchRec) Die Programme die in der Listbox enthalten sind besitzen alle ein Setup. Wenn der User nun mehrere Programme in der Listbox ausgewählt hat, sollte eins nach dem anderen installiert werden... Also mit dem ersten beginnend, wenn das erste Programm fertig installiert ist, sollte das 2. Setup automatisch starten usw... Für das ganze habe ich nun die Funtion ExecAndWait verwendet, seltsamerweise läuft beim ersten Setup noch alles normal, es kommt aber komischerweise vor das z.B. beim start von Setup3 die folgenden Setups gleich mitaufgerufen werden und installieren wollen was logischerweise nicht dem entspricht was ich wollte. Ich hab keine Ahnung wo der Fehler sein soll, da die ersten beiden Setups ablaufen wie gewollt (nacheinander) gibt es eventuell eine andere sicherere Methode als die folgende Funktion die ich irgendwo gefunden habe?
Delphi-Quellcode:
Ggf. hat jemand auch einen anderen Lösungsansatz für mein Problem...?function ExecAndWait(ExecFile:PChar; TimeOut:Word; AllowKill:Boolean; Show:Boolean):Integer; var PROCESSINFO : TProcessInformation; STARTUPINFO : TStartupInfo; lpExitCode : Cardinal; Msg : TMsg; sTime : TDateTime; hrs,mins,secs,msecs: Word; begin sTime:=SysUtils.Time; Result := 0; With STARTUPINFO do begin cb := SizeOf(STARTUPINFO); lpReserved := nil; lpDesktop := nil; lpTitle := nil; dwFlags := STARTF_USESHOWWINDOW; lpReserved := nil; cbReserved2 := 0; lpReserved2 := nil; If Show then wShowWindow := SW_NORMAL else wShowWindow := SW_HIDE; end; If CreateProcess(nil,ExecFile,nil,nil,False,NORMAL_PRIORITY_CLASS,nil,nil, STARTUPINFO,PROCESSINFO) then begin Repeat While PeekMessage(Msg,0,0,0,PM_REMOVE) do begin If Msg.message = WM_QUIT then Halt(Msg.wParam); TranslateMessage(Msg); DispatchMessage(Msg); end; GetExitCodeProcess(PROCESSINFO.hProcess,lpExitCode); decodetime (sysutils.time-stime,hrs,mins,secs,msecs); hrs:=hrs*60+mins; hrs:=hrs*60+secs; If (TimeOut > 0) and (TimeOut < hrs) then begin Result := 1; If AllowKill then begin If TerminateProcess(PROCESSINFO.hProcess,0) then Result := 2 else Result := 3; end; Break; end; Until lpExitCode <> STILL_ACTIVE; With PROCESSINFO do begin CloseHandle(hThread); CloseHandle(hProcess); end; If Result = 0 then Result := lpExitCode; end else Result := GetLastError; end; Vielen Dank s! |
Re: WinExecAndWait Problem
Hallo,
ich vermute, dass dein Setup3.exe lediglich ein selbstentpackendes Archiv ist. Nach dem Auspacken wird dann die Kontrolle an das eigentliche Setup-Programm (oder -Script) übergeben und der Entpacker beendet sich. Während die eigentliche Setup-Routine sich gerade anschickt die Arbeit aufzunehemen, startet dein Programm bereits Setup4. Du musst bei deinem Ansatz darauf achten, dass auch wirklich gleichartige Prozesse ablaufen - oder du musst diese Besonderheiten mit ins Kalkül ziehen. Grüße vom marabu |
Re: WinExecAndWait Problem
Zitat:
Hättest Du da vielleicht eine Idee wegen dem Kalkül ... Schwitz... s! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz