Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abfrage, ob ein gestartetes Programm noch läuft (https://www.delphipraxis.net/101396-abfrage-ob-ein-gestartetes-programm-noch-laeuft.html)

ascotlx 12. Okt 2007 13:24


Abfrage, ob ein gestartetes Programm noch läuft
 
Moin moin,

ich habe ein Programm geschrieben, das in mehreren Schritten Software installiert.
Um die externen Setup Programme zu starten benutzte ich die Funktion RunAndWaitShell.
ShellExecute, and Wait

Nach dem Start der Setup Programme setzte ich den "Beenden" Button meiner CD-Oberfläche auf
Delphi-Quellcode:
bBeenden.Enabled:=false;
und nun meine Frage:
Wie kann ich es nun anstellen, dass ich mitbekomme, wenn die Installation abgebrochen wird ?? dann soll sich auch meine Applikation mit einer Meldung verabschieden.

Kann mir jemand eine Hilfestellung geben ??

Besten Dank

ascotlx

Aurelius 12. Okt 2007 14:01

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
Wenn du nach einer best. Exe wie um Taskmanager unter "Prozesse" gucken willst, dann geh mal auf www.swissdelphicenter.ch und dort auf "Programmiertipps" --> "Suche". Dort findest du eine tolle Funktion zu diesem Thema. Alternativ mal die DP-Suche bemühen, ich hatte eine ähnliche Frage schonmal gestellt.

Relicted 12. Okt 2007 14:18

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
huhu!

mit der funktion hier kannst du schauen ob eine bestimmte exe noch läuft...

Delphi-Quellcode:
function GetProcessID(Exename: string): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
    begin
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;
du könntest also mit:

Delphi-Quellcode:
//provisorisch...
self.hide;
repeat
  sleep(100);
until (GetProcessID('setup.exe'));
self.show;
so lange dich verstecken bis das setup gekillt/beendet wurde...

gruß
reli

Apollonius 12. Okt 2007 14:20

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
Aber RunAndWaitShell wartet doch schon, bis der Prozess beendet wurde.

ascotlx 12. Okt 2007 14:35

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
Zitat:

Zitat von Apollonius
Aber RunAndWaitShell wartet doch schon, bis der Prozess beendet wurde.

wahrscheinlich macht RunAndWaitShell das, aber woran mache ich dann das "Wiederanschalten" meines
"Beenden- Buttons" fest ??

dominikkv 12. Okt 2007 14:38

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
sind die externen setupprogramme von dir?
vllt kannst du nen exitcode auswerten, wie weiß ich auch nicht :/

Apollonius 12. Okt 2007 14:42

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
Wann deaktivierst du den Button denn? Zeig einfach mal die gesamte Prozedur, in der RunAndWaitShell aufgerufen wird.

OregonGhost 12. Okt 2007 15:08

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
Du könntest nach dem Beenden des Installationsprozesses überprüfen, ob die Installation erfolgreich war, z.B. einen entsprechenden Registry-Schlüssel auslesen, der während der Installation geschrieben wird.

ascotlx 12. Okt 2007 15:12

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
@ dominikkv
moin dominik, ... die Setup Routine ist nicht von mir ...

Zitat:

Zitat von Apollonius
Wann deaktivierst du den Button denn? Zeig einfach mal die gesamte Prozedur, in der RunAndWaitShell aufgerufen wird.

Moin Apollonius,
gerne doch .... und wenn ich des öfteren mal debuggen und LESEN würde, ginge mir so manchesmal eine Lampe auf :idea: .
Sorry ... der Fehler ist gefunden... ich habe den Button einfach nicht zurückgesetzt .... Hier aber trotzdem die (korrigierte) Prozedur (Zeile 21-24 sind neu) ...

Delphi-Quellcode:
// *****************************************************************************
// Installation der SSC
procedure RO1SSC;
var FileP, ssc_dir, Param_ssc: string;
    err: Integer;
begin
 bKonfiguration.Enabled:=false;
 bBeenden.Enabled:=false;
 Label9.Visible:=false;
 Label7.Left:=130;
 Label7.Font.Color:=clRed;
 Label7.Caption:='Bitte warten ... Bearbeitung läuft ...';

 FileP := ExtractFilePath(Application.ExeName);

 Param_ssc:='/s /v"/qb REBOOT=force"';
 err:=Form3.RunAndWaitShell(FileP+'SSC\'+'setup.exe',Param_ssc,ssc_dir,SW_SHOW);
 if (err >0) and (err < 32) then
  Showmessage(Form3.ShellExecuteErrMessage(Err));

 if (err >32) then
  Showmessage(Form3.ShellExecuteErrMessage(Err)+#13#10+'Die Installation wird beendet.');

 bBeenden.Enabled:=true;
end;
schönes Wochenende ... und nochmal danke (mache gleich noch einen "neuen" auf ...)

DeddyH 12. Okt 2007 15:58

Re: Abfrage, ob ein gestartetes Programm noch läuft
 
Zitat:

Zitat von ascotlx
Delphi-Quellcode:
if (err >0) and (err < 32) then
  Showmessage(Form3.ShellExecuteErrMessage(Err));

if (err >32) then

Und was machst Du, wenn err = 32?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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