AGB  ·  Datenschutz  ·  Impressum  







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

Prozess starten und warten

Ein Thema von Gast · begonnen am 14. Jun 2002 · letzter Beitrag vom 10. Feb 2003
Antwort Antwort
Gast
(Gast)

n/a Beiträge
 
#1

Prozess starten und warten

  Alt 14. Jun 2002, 07:52
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
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2
  Alt 14. Jun 2002, 08:42
Hier weiß ich 100%, woher ich die Funktion habe. Von den JEDIs, und sie funktioniert prima:
Code:
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;
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!

Gruß,
Mathias.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#3
  Alt 14. Jun 2002, 08:50
Hi Mathias,

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.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.482 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Prozess starten und warten

  Alt 14. Jun 2002, 09:35
Zitat von Paul Jr.:
Leider, startet die Auto.Exe überhaupt nicht...
Vielleicht enthält der Pfad, den du über ExtractFilePath(ParamStr(0)); ermittelst Leerzeichen. Dann musst du nämlich den Programmnamen in Anführungszeichen setzen.
Code:
if Pos(' ', sSetupAufruf) > 0 then sSetupAufruf := '"' + sSetupAufruf + '"';
-----------------------
Zitat:
sage mir aber noch bitte... wie ist das RESULT dieser Funktion zu bewerten?
Wenn Result den Wert $FFFFFFFF liefert, dann trat ein Fehler auf. Entweder ist die Anwendung gar nicht erst gestartet worden, oder die Funktion GetExitCodeProcess lieferte einen Fehler zurück. Ist dem nicht so, dann enthält Result den ExitCode des Kind-Prozesses. Zum Beispiel wird bei den Kommandozeilen-Versionen von Virenscannern ein ExitCode <> 0 zurückgeliefert wenn die zu scannende Datei einen Virus enthält.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#5
  Alt 14. Jun 2002, 09:50
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!!!

Gruß

Paul Jr.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.482 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6
  Alt 14. Jun 2002, 10:04
Code:
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;
Kontretisiert:
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:
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;
Ich hoffe, dass das dir etwas hilft.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#7
  Alt 14. Jun 2002, 10:15
Hallo jbg,

Du bist ein Teufelskerl...

Es kappt hervorragend...

Besten Dank an Dich und natürlich an Mathias für die tolle Funktion...

Gruß

Paul Jr.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8
  Alt 14. Jun 2002, 13:09
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:
if(WinExec32AndWait('MsiInstA.exe',SW_SHOWNORMAL) = ERROR_SUCCESS_REBOOT_REQUIRED) then
  // führ noch schnell was aus, dann reboote!
usw.

Die anderen Konstanten sollten in der Hilfe stehen. Oder im PSDK, Stichwort "System Error Codes".
  Mit Zitat antworten Zitat
poy

Registriert seit: 19. Dez 2002
Ort: CH
21 Beiträge
 
Delphi 7 Architect
 
#9
  Alt 10. Feb 2003, 14:20
gibt es auch eine solche methode wenn ich nicht winexec benutzte sondern shellexecute?
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#10
  Alt 10. Feb 2003, 14:32
Hoi,
die Procedure heist lediglich WinExec... du kannst sie auch umbenenne. In ihr wird nicht WinExec sondern CreateProcess aufgerufen.
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  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:12 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