AGB  ·  Datenschutz  ·  Impressum  







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

WinExecAndWait Problem

Ein Thema von stOrM · begonnen am 14. Apr 2007 · letzter Beitrag vom 14. Apr 2007
Antwort Antwort
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#1

WinExecAndWait Problem

  Alt 14. Apr 2007, 12:44
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:

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;
Ggf. hat jemand auch einen anderen Lösungsansatz für mein Problem...?
Vielen Dank
s!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: WinExecAndWait Problem

  Alt 14. Apr 2007, 13:41
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
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: WinExecAndWait Problem

  Alt 14. Apr 2007, 13:48
Zitat von marabu:
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
Da könntest Duz recht haben (bin mir da eigentlich ziemlich sicher)
Hättest Du da vielleicht eine Idee wegen dem Kalkül ... Schwitz...

s!
  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 07:45 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