Ich möchte überprüfen, ob der Prozess seit langer Zeit ausgeführt wurde (sagen wir 5 Minuten) und beenden, wenn dies der Fall ist.Beenden Sie einen Prozess nach Timeout mit VBScript
unten ist das Skript, das ich geschrieben habe, aber es wirft ungültige Eigenschaft/Methode Fehler:
Const MAX_TIME = 300 'seconds
const I = 1
arrTargetProcs = Array("example.exe")
'process names without extension
do while I = 1
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer)
For Each strTargetProc In arrTargetProcs
Set colProcesses = objWMIService.ExecQuery _
("SELECT * FROM Win32_PerfRawData_PerfProc_Process WHERE Name = '" & _
strTargetProc & "'")
If colProcesses.Count > 0 Then
For Each objProcess In colProcesses
intProcDur = (objProcess.Timestamp_Object - _
objProcess.ElapsedTime)/objProcess.Frequency_Object
If Int(intProcDur) > MAX_TIME Then
'WScript.Echo "Process " & objProcess.Name & " " & _
'objProcess.IDProcess & " over time limit."
Set objProc = objWMIService.Get _
("Win32_Process.Handle='" & objProcess.IDProcess & "'")
intReturn = objProc.Terminate()
If intReturn = 0 Then
'WScript.Echo " Process terminated."
Else
'WScript.Echo " Unable to terminate process."
End If
Else
'WScript.Echo "Process " & objProcess.Name & " " & _
'objProcess.IDProcess & " not over time limit."
End If
Next
Else
'WScript.Echo "Process " & strTargetProc & " not found."
End If
Next
WScript.Sleep 50000
Loop
Ich bin unten Störung zu erhalten:
Objekt diese Eigenschaft oder diese Methode nicht unterstützt: ‚objProcess.Timestamp_Object '
Gibt es Möglichkeit, ich kann identifizieren, wenn der Prozess von 5 Minuten ausgeführt wurde?
Ich kann es in Win32_Process-Objekt ändern. Ich verstehe den Unterschied zwischen ihnen nicht wirklich. Kannst du mir bitte erklären, wie ich Erstellungsdatum und Now() vergleiche? und Ergebnis in Sekunden erhalten? DateDiff ("S", Date1, Date2) gibt ungültigen Datentyp zurück. –
Siehe zusätzliche EDIT 2 – Dave
Ich hatte vergessen, die Antwort zu akzeptieren :) Danke. –