Seite 1 von 1

WMI Prozess Abfrage

Verfasst: Do, 31. Jan 2019 12:19
von littlea1991
Hallo Liebe Forenmitglieder,

ich würde gerne über WMI herausfinden ob ein Prozess noch läuft oder nicht. (Wenns geht über Remote Login) In der Powershell gibt es die Abfrage:
"Get-WmiObject -query "SELECT * from Win_32_Process Where Name = 'Prozessname' " Wenn ich das allerdings über Xbase aufrufe, dann bekomme ich immer ein PropertyName nicht gefunden zurück. So sieht mein Code dafür aus:

Code: Alles auswählen

LOCAL wmi := GetObject(,"WbemScripting.SWbemLocator" + pc +"\root\cimv2")
oWmiLocator   := GetObject( ,"WbemScripting.SWbemLocator" )
oWmiServices  := oWmiLocator:ConnectServer( "Localhost", "Root\CIMv2" )
col := oWmiServices:ExecQuery("Select * from Win32_Process where Name = 'Prozessname'",,48)

result := wmi:getProperty("Name")

Rufe ich das WmiObject falsch auf? Ich würde nur gerne Wissen ob der Prozess noch läuft oder nicht, in der Powershell liefert die Abfrage nichts zurück wenn der Prozess auch nicht läuft auf dem Rechner.

Vielen Dank im Voraus für eure Hilfe

Ali

Re: WMI Prozess Abfrage

Verfasst: Do, 31. Jan 2019 12:47
von AUGE_OHR
littlea1991 hat geschrieben: Do, 31. Jan 2019 12:19

Code: Alles auswählen

LOCAL wmi := GetObject(,"WbemScripting.SWbemLocator" + pc +"\root\cimv2")
oWmiLocator   := GetObject( ,"WbemScripting.SWbemLocator" )
oWmiServices  := oWmiLocator:ConnectServer( "Localhost", "Root\CIMv2" )
col := oWmiServices:ExecQuery("Select * from Win32_Process where Name = 'Prozessname'",,48)

result := wmi:getProperty("Name")
Rufe ich das WmiObject falsch auf?
o:ExecQuery() gibt dir "so" nicht das Ergebinis ...

man kann ein Array nehmen was man so "füllt"

Code: Alles auswählen

   colItems       := objWMIServices:ExecQuery("select * from Win32_Process",,48)
   // Codeblock
   bCollBlock     := {|oService,n| AADD(aItem,{ n,;
         oService:getProperty("Name"),;
         ...
         oService:getProperty("WriteTransferCount") })}
   // s.h. Help File
   ComEvalCollection(colItems, bCollBlock )
   // jetzt ist das Array gefüllt
   IF LEN(aItem) > 0
p.s. unbedingt AUFRÄUMEN wenn man ActiveX / COM nutzt :!:

Re: WMI Prozess Abfrage

Verfasst: Do, 31. Jan 2019 14:23
von littlea1991
Ah Danke für den Tipp, so funktioniert es jetzt :D ich würde gerne für mein Programm eine Remote Prozessüberwachung einführen über WMI. Es beendet sich bereits selbstständig falls ein Xbase Error Auftritt und jetzt frage ich über ein Zusätzliches Verwaltungsprogramm den Status immer wieder über WMI ab. Nützlich wäre es noch wenn man es darüber gleich neustarten könnte (Vielleicht über ein Remote Skript aufruf)
Vielen Dank für deine Hilfe!

Ali

Re: WMI Prozess Abfrage

Verfasst: Do, 31. Jan 2019 15:13
von brandelh
Ein Programm nach Absturz automatisch neu starten, haben wir mit CMD Dateien gemacht (ist schon ein paar Jahre her).
Dabei muss man nur die Möglichkeit einräumen, dass der Anwender tatsächlich beenden will und die CMD statt der EXE starten ;-)

Ein Beispiel dazu wird in "ErrorLevel() - Return-Code für eine Xbase++ Anwendung bestimmen " gezeigt, wobei der Grundsatz so aussieht ( // Kommentare sind nur für hier) :

MeinExeStarten.CMD

Code: Alles auswählen

@echo off
cls
:ProgrammStart
MeineExe.EXE    // Reguläres Ende ist ERRORLEVEL = 0, ErrorSys setzt bei Fehler ERRORLEVEL = 1, höhere Werte können eigene Zustände und Reaktionen festlegen.
IF ERRORLEVEL 2 GOTO ... // Vergleich ist Größer oder Gleich ... hier würden alle Benutzerdefinierten landen
IF ERRORLEVEL 1 GOTO FehlerNeustart
GOTO KeinFehlerNeustart *** ODER *** GOTO Exit 

:FehlerNeustart
   ECHO Fehler sind aufgetreten, EXE wird neu gestartet // Aufräumen ?
   GOTO ProgrammStart

:KeinFehlerNeustart
   ECHO Programm darf nicht beendet werden und startet neu 
   GOTO ProgrammStart

:Exit 
   ECHO Xbase++ Anwendung ist beendet 
   REM *EOF* 

Re: WMI Prozess Abfrage

Verfasst: Fr, 01. Feb 2019 7:29
von littlea1991
Genau so etwas ähnliches habe ich bereits auch vor, mit dem Errorblock wird eine Routine aufgerufen und mit einem QUIT das Programm beendet, das Skript für das Neustarten, läuft es dann Lokal auf dem Rechner?
Vielen Dank für eure Hilfe!

Ali

Re: WMI Prozess Abfrage

Verfasst: Fr, 01. Feb 2019 7:53
von brandelh
ja klar, alles auf diesem Rechner.
Früher haben wir so Updates verteilt, wenn die EXE auf dem Server eine neuere Datei fand (noch zu Clipper Zeiten)
Unter DOS haben wir so auch ein Menü System implementiert, das keinen zusätzlichen RAM gefressen hat.