AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Prüfen mittels PID ob Prozess läuft
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen mittels PID ob Prozess läuft

Ein Thema von Mohadrim · begonnen am 28. Mai 2012 · letzter Beitrag vom 24. Jun 2020
Antwort Antwort
Seite 1 von 2  1 2      
Mohadrim

Registriert seit: 4. Jun 2004
8 Beiträge
 
#1

Prüfen mittels PID ob Prozess läuft

  Alt 28. Mai 2012, 20:14
Hallo,

das ganze treibt mich in den Wahnsinn. Ich hab schon einige Beiträge hier durch aber bei mir geht es nicht.

Benötigt: Ich habe eine PID als Integerwert nun möchte ich gerne prüfen, ob der Prozess dazu läuft und hätte gerne ein Ja oder Nein zurück.

Problem: Ich habe einige Sachen ausprobiert wie Beitrag http://www.delphipraxis.net/26833-pr...ng-laeuft.html wenn ich dort

[DELPHI]hProcess := GetProcessHandleFromID(GetProcessID('notepad.exe') );DELPHI]

angeb geht alles gut und er sagt das das Programm läuft. Nur wenn ich die PID direkt übergebe bekomm ich immer ein OK egal ob der Prozess läuft oder nicht obwohl es auch so wie im Beitrags Script ausgeführt wird.

Delphi-Quellcode:
...
var myHandle: THandle;
begin
myHandle := OpenProcess(SYNCHRONIZE, False, myID);
if myHandle <> 0 then
Label1.Caption := 'ok'
else
Label1.Caption := 'no';
...


Die PID stimmt definitiv und wäre auch die gleiche die im oberen Script (Link) gesagt wird.
Kann mir da jemand helfen? Wie gesagt ich will nur eine PID Abfragen und den Status bekommen mehr nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Prüfen mittels PID ob Prozess läuft

  Alt 28. Mai 2012, 20:28
Und wo bekommst du die PID nachher her? Und was sagt GetLastError im Fehlerfall?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Prüfen mittels PID ob Prozess läuft

  Alt 28. Mai 2012, 20:37
Du überprüfst nicht, ob ein Prozess mit der PID läuft, sondern prüfst ob diese Null ist. Wenn du sie auf einen bestimmten Wert setzt, ist sie das natürlich nie.

Außerdem sind ein Handle und eine PID auch unterschiedliche Sachen.

In dem verlinktem Beitrag ist folgender Teil interessant:
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 // gehe durch alle Prozesse
      begin
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID; // die Prozess ID wird zurückgegeben
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;
PS: @Luckie:
Wäre es so rum nicht richtiger:
Delphi-Quellcode:
 if Process32First(hProcSnap, pe32) then
    begin
      repeat // gehe durch alle Prozesse
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID; // die Prozess ID wird zurückgegeben
      until Process32Next(hProcSnap, pe32);
    end;
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (28. Mai 2012 um 20:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.345 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Prüfen mittels PID ob Prozess läuft

  Alt 28. Mai 2012, 21:21
Wobei das so eigentlich kaum einen Sinn macht. Die Process ID ist Schall und Rauch, da diese nach der Beendigung eines Prozesses auch wieder vergeben wird. Ob also der Prozess noch läuft, zu dem die ID ursprünglich gehörte, oder ein neuer mit dieser ID, lässt sich aus der ID nicht feststellen.

Man kann vielleicht zusätzlich vergleichen wann der Prozess gestartet wurde um eine bestimmte Instanz zu prüfen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
650 Beiträge
 
Delphi 12 Athens
 
#5

AW: Prüfen mittels PID ob Prozess läuft

  Alt 29. Mai 2012, 10:01
Hm, nehmen wir mal an, es macht einen Sinn - ich konnte das gewünschte hier nachbauen und es läuft ohne Probleme:

Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);

var myID: integer;
  hProcess: THandle;

begin
  myID:=strToInt(edit1.Text);
  hProcess := GetProcessHandleFromID(myID);
  if hProcess = 0 then
    Label1.Caption := 'Programm läuft nicht'
  else
    Label1.Caption := 'Programm läuft';
end;
Hier liegt nur ein Edit auf dem Formular, in dem man eine ID manuell eingeben kann (die man vorher über einen anderen Button sich anzeigen lassen kann). Ein Klick auf Button2 löst obige Prozedur aus. Ich habe das dann mit dem Notepad++ getestet und seine aktuelle Prozess-ID angegeben. Das Programm hat mir gesagt, dass er läuft. Dann habe ich den Notepad++ beendet und bekam die Meldung, dass er nicht mehr läuft. Alles gut also.

Will sagen: wenn du die Funktionen von Luckie so aufrufst, funktioniert das wie von dir gewünscht gewünscht. Das Problem müsste in der Tat irgendwo anders liegen. Vielleicht steht in deiner Variable zum Zeitpunkt des Aufrufs der falsche Wert, denn was vorher mit der passiert, wissen wir ja nicht.

Bis denn
Bommel
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Prüfen mittels PID ob Prozess läuft

  Alt 29. Mai 2012, 11:56
ich konnte das gewünschte hier nachbauen und es läuft ohne Probleme
Funktioniert das auch bei Prozessen ohne Fenster, also z.B. bei Kommandozeilenprogrammen?
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
650 Beiträge
 
Delphi 12 Athens
 
#7

AW: Prüfen mittels PID ob Prozess läuft

  Alt 29. Mai 2012, 12:16
ich konnte das gewünschte hier nachbauen und es läuft ohne Probleme
Funktioniert das auch bei Prozessen ohne Fenster, also z.B. bei Kommandozeilenprogrammen?
Jepp. Gerade mit einem in einer Eingabeaufforderung gestarteten Telnet-Client getestet.
  Mit Zitat antworten Zitat
Mohadrim

Registriert seit: 4. Jun 2004
8 Beiträge
 
#8

AW: Prüfen mittels PID ob Prozess läuft

  Alt 20. Jun 2012, 08:11
Okay hab nun noch mal alles neu eingefügt und siehe da es geht. Danke nochmal.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Prüfen mittels PID ob Prozess läuft

  Alt 20. Jun 2020, 21:42
Ich prüfe auf diesem Weg, ob die bds.exe (also Delphi) läuft.

Das funktioniert auch.

Aber kann ich noch den Pfad der Exe ermitteln, um auf eine bestimmte Version zu prüfen?

Im Taskmanager kann man über Rechtsklick auch "Dateipfad öffnen" auswählen.
Kommt man an die Info heran?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.137 Beiträge
 
Delphi 12 Athens
 
#10

AW: Prüfen mittels PID ob Prozess läuft

  Alt 20. Jun 2020, 21:47
z.B. die Toolhelp-APIs
MSDN-Library durchsuchenProcess32First

oder via WMI
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:44 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