#1 Abfrage auf einen laufenden Prozess von thschuetz 26.07.2012 14:17

Moin!

Ich versuche mich gerade an einer Funktion, die überprüft, ob ein Task schon läuft oder nicht. Gibt da im Internet zu VBS einige Beispiele, aber anscheinend mag DXScript in diesem Zusammenhang die Methode "Count" nicht. So sieht mein momentaner Stand aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
 
Function CheckProcess (sProgramname as String) as Boolean
Dim oWMI as Object
Dim oProcess as Object

Set oWMI = GetObject("winmgmts:\\.")
Set oProcess = oWMI.ExecQuery("select * from win32_process where name=´" & sProgramname & "´ ")
If oProcess.Count <> 0 Then
CheckProcess = True
Else
CheckProcess = False
End If
Set oWMI = Nothing
End Function
 



In der Zeile mit "oProcess.Count" knallt es. Hat jemand eine Idee, warum das so ist und wie ich die Funktion realisieren kann?

Vielen Dank schon mal im Voraus.

Mit freundlichen Grüßen,

Thomas Schütz

#2 RE: Abfrage auf einen laufenden Prozess von Andreas 26.07.2012 15:33

avatar

Hallo Herr Schütz,

versuchen Sie mal diesen Codeschnipsel (dieser wartet auf einen Prozess) als Grundlage:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
Sub Main

Dim objWMIService, objProcess, colProcess As Object
Dim strProcess, strComputer
Dim iDXDistRunning
 
strProcess = "notepad.exe" 'Prozessname auf den gewartet werden soll
strComputer = "." ' Wird für die lokale WMI-Abfrage benötigt
 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
iDXDistRunning = 0 ' Initialisiert die Variable mit 0 (Prozess nicht gefunden)
 

While iDXDistRunning < 1

' WMI-Abfrage - ist strProcess als laufender Prozess vorhanden?
Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process where Name='"&strProcess &"'")

' Prüfen, ob der Prozess läuft
If colProcess.count Then
MsgBox "Prozess gefunden!"
iDXDistRunning = 1 ' Prozess gefunden - setze Variable auf 1
End If
 
' wenn der Prozess nicht gefunden wurde, 1sek. warten
If iDXDistRunning < 1 Then
Wait 1
End If
Wend

End Sub
 



Sieht für mich so aus, als wenn es Probleme gibt mit '<> 0', da 'ColProzess.Count' scheinbar keinen Wert hat, wenn der Prozess nicht gefunden wird.
Es müsste also vermutlich so aussehen:

1
2
3
4
5
 
If oProcess.Count Then
CheckProcess = True
Else
CheckProcess = False
End If
 



Mit freundlichen Grüßen

#3 RE: Abfrage auf einen laufenden Prozess von thschuetz 27.07.2012 09:58

Hallo Herr Ahlrichs,

vielen Dank für Ihre Hilfe! ich war etwas verwirrt, dass Ihr Skript funktioniert, da Sie ja eigentlich die gleichen Befehle verwenden. Und colProcess.Count gibt tatsächlich brav einen Integer mit der Anzahl zurück, das Problem war schon davor:

Ich habe bei der Abfrage Akzente statt Hochkomma verwendet, also ` statt ', das funktionierte natürlich nicht. Ich hatte mir den Teil einfach aus dem Netz kopiert und dort war wohl das falsche Zeichen in der Seite. Und ich habe gepennt... *zugeb*

Meine fertige Lösung sieht jetzt so aus (falls jemand anderes daran Interesse hat):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Option Explicit
 
Sub Main
If CheckProcess ("notepad.exe") Then
MsgBox ("Notepad läuft")
Else
MsgBox ("Notepad läuft nicht")
End If
End Sub
 
Function CheckProcess (sProgramname As String) As Boolean
Dim oWMI As Object
Dim oProcess As Object

Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
 
Set oProcess = oWMI.ExecQuery("select * from win32_process where name='" & sProgramname & "' ")
If oProcess.count > 0 Then
CheckProcess = True
Else
CheckProcess = False
End If
Set oWMI = Nothing
End Function
 



Mit freundlichen Grüßen,

Thomas Schütz

Xobor Ein eigenes Forum erstellen
Datenschutz