使用VBScript在超时后终止进程
我想检查这个进程是否已经运行了很长时间(比如说5分钟),如果是这样,就终止它 下面是我编写的脚本,但它抛出无效的属性/方法错误:使用VBScript在超时后终止进程,vbscript,Vbscript,我想检查这个进程是否已经运行了很长时间(比如说5分钟),如果是这样,就终止它 下面是我编写的脚本,但它抛出无效的属性/方法错误: Const MAX_TIME = 300 'seconds const I = 1 arrTargetProcs = Array("example.exe") 'process names without extension do while I = 1 strComputer = "." Set objWMIService = GetObject("winmgmt
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
我得到以下错误:
对象不支持此属性或方法:“objProcess.Timestamp\u对象”
是否有办法确定流程是否已从5分钟开始运行 检查
objProcess.CreationDate
值,并与DateDiff
调用的Now
进行比较,如果秒数>300,调用终止
方法
编辑:抱歉,我以为您引用的是Win32\u进程
对象。对于Win32\u PerfRawData\u PerfProc\u进程
,您需要的相关属性是ElapsedTime
,它根据给出进程已运行的秒数。如果该值超过300,则进程已运行5分钟或更长时间
intProcDur=objProcess.ElapsedTime
应将intProcDur设置为相关值以供比较
编辑2:以下修改版本的代码检索进程启动后的秒数(在我的示例中为vbsedit.exe
):
检查
objProcess.CreationDate
值,并使用DateDiff
调用与Now
进行比较,如果秒数>300,调用Terminate
方法
编辑:抱歉,我以为您引用的是Win32\u进程
对象。对于Win32\u PerfRawData\u PerfProc\u进程
,您需要的相关属性是ElapsedTime
,它根据给出进程已运行的秒数。如果该值超过300,则进程已运行5分钟或更长时间
intProcDur=objProcess.ElapsedTime
应将intProcDur设置为相关值以供比较
编辑2:以下修改版本的代码检索进程启动后的秒数(在我的示例中为vbsedit.exe
):
我可以将其更改为Win32_进程对象。但是我不太明白他们之间的区别。请您解释一下,我如何比较创建日期和现在()?然后在几秒钟内得到结果?DateDiff(“S”,Date1,Date2)返回无效的数据类型。请参阅附加编辑2。我可以将其更改为Win32_进程对象。但是我不太明白他们之间的区别。请您解释一下,我如何比较创建日期和现在()?然后在几秒钟内得到结果?DateDiff(“S”,Date1,Date2)返回的数据类型无效。请参阅附加编辑2
arrTargetProcs = Array("Vbsedit.exe")
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer)
For Each strTargetProc In arrTargetProcs
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & strTargetProc & "'")
If colProcesses.Count > 0 Then
For Each objProcess In colProcesses
intProcDur = objProcess.CreationDate
intProcDur = CDate(Mid(intProcDur, 7,2) & "/" & Mid(intProcDur, 5, 2) & "/" & Left(intProcDur,4) & " " & Mid(intProcDur,9,2) & ":" & Mid(intProcDur, 11,2) & ":" & Mid(intProcDur,13,2))
WScript.Echo objProcess.Name & ": " & intProcDur
WScript.Echo DateDiff("s", intProcDur, Now) & " seconds since this process began."
Next
End If
Next