![]() |
Prozess starten und warten
Hallo,
Prozess starten und warten Aus einem Setup-Programm sollte ein anderer Programm gestartet werden (hier die Datei: Auto.Exe) und dann sollte das Setup-Programm auf das Ende des Prozesses warten.... Leider, startet die Auto.Exe überhaupt nicht... Wo mache ich hier Fehler? [code:1:1b3f5e910e] VAR |
Hier weiß ich 100%, woher ich die Funktion habe. Von den JEDIs, und sie funktioniert prima:
Code:
btw: ich verwende diese Funktion auch in meinem Setup, um alte Versionen (Registry) zu entfernen, bevor dann die neue Installation startet. Wie gesagt, klappt sehr gut!
function WinExec32AndWait(const Cmd: string; const CmdShow: Integer): Cardinal;
var sui : TStartupInfo; pi : TProcessInformation; begin Result := Cardinal($FFFFFFFF); ZeroMemory(@sui,sizeof(TStartupInfo)); sui.cb := SizeOf(TStartupInfo); sui.dwFlags := STARTF_USESHOWWINDOW; sui.wShowWindow := CmdShow; if(CreateProcess(nil,pchar(Cmd),nil,nil,False,NORMAL_PRIORITY_CLASS,nil,nil,sui,pi)) then begin WaitForInputIdle(pi.hProcess, INFINITE); if(WaitForSingleObject(pi.hProcess, INFINITE) = WAIT_OBJECT_0) then begin {$IFDEF DELPHI3} if not GetExitCodeProcess(pi.hProcess, Integer(Result)) then {$ELSE} if not GetExitCodeProcess(pi.hProcess, Result) then {$ENDIF DELPHI3} Result := Cardinal($FFFFFFFF); end; CloseHandle(pi.hThread); CloseHandle(pi.hProcess); end; end; Gruß, Mathias. |
Hi Mathias, :P
gleich werde Deine Funktion ausprobieren und hier Bescheid sagen... sage mir aber noch bitte... wie ist das RESULT dieser Funktion zu bewerten? Erläutere es bitte... Gruß Paul Jr. |
Re: Prozess starten und warten
Zitat:
Code:
-----------------------
if Pos(' ', sSetupAufruf) > 0 then sSetupAufruf := '"' + sSetupAufruf + '"';
Zitat:
|
Danke jbg, 8)
trotzdem... bin ich vielleicht zu blöd...für diese Funktion...? Vielleicht könnte mir jemand zeigen wie ich diese Funktion im Programm benutzen kann um eine beliebige EXE- Datei zu starten... nach mehreren Versuchen...kann ich nur sagen: FIASSKO bewegt sich überhaupt nichts... diese cmdShow... was für ein Wert sollte ich hier übergeben.. Hilfe!!! :shock: Gruß Paul Jr. |
Code:
Kontretisiert:
var ChildExitCode: Cardinal;
begin ChildExitCode := WinExec32AndWait('"Lw:\Path\File.exe" Parameters', SW_NORMAL); if Integer(ChildExitCode) = -1 then ShowMessage('Das Programm konnte nicht gestartet werden.'); end;
Code:
var ChildExitCode: Cardinal;
begin ChildExitCode := WinExec32AndWait('"C:\Program Files\Borland\Delphi6\Bin\Delphi32.exe"', SW_NORMAL); if ChildExitCode = $FFFFFFFF then ShowMessage('Delphi 6 konnte nicht gestartet werden.'); end;
Code:
Ich hoffe, dass das dir etwas hilft.
var ChildExitCode: Cardinal;
begin ChildExitCode := WinExec32AndWait('"C:\Program Files\Borland\Delphi6\Bin\Delphi32.exe" C:\MyFiles\Project1.dpr', SW_NORMAL); if ChildExitCode = $FFFFFFFF then ShowMessage('Delphi 6 konnte nicht gestartet werden und somit auch nicht die Datei C:\MyFiles\Project1.dpr öffnen.'); end; |
Hallo jbg, :D
Du bist ein Teufelskerl... Es kappt hervorragend... Besten Dank an Dich und natürlich an Mathias :D für die tolle Funktion... Gruß Paul Jr. |
Du kannst auch die Konstanten von Windows benutzen. Ich teste z.B., ob die Installation des MSI erforderlich ist, und der macht ja (unter Win98) danach meist einen Reboot:
Code:
usw.
if(WinExec32AndWait('MsiInstA.exe',SW_SHOWNORMAL) = ERROR_SUCCESS_REBOOT_REQUIRED) then
// führ noch schnell was aus, dann reboote! Die anderen Konstanten sollten in der Hilfe stehen. Oder im PSDK, Stichwort "System Error Codes". |
gibt es auch eine solche methode wenn ich nicht winexec benutzte sondern shellexecute?
|
Hoi,
die Procedure heist lediglich WinExec... du kannst sie auch umbenenne. In ihr wird nicht WinExec sondern CreateProcess aufgerufen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 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-2025 by Thomas Breitkreuz