【发布时间】:2017-05-21 04:46:52
【问题描述】:
我正在尝试制作一个 vb 脚本,如果它崩溃,它将重新启动另一个 vb 脚本。 我已经搜索过,但我得到的只是如何重新启动程序,并且由于 vb 脚本是后台进程,因此在 Win32_Process 中搜索时它不起作用。
这是我的代码
set Service = GetObject ("winmgmts:")
set Shell = WScript.CreateObject("WScript.Shell")
sEXEName = "Test_To_Block.vbs"
while true
bRunning = false
for each Process in Service.InstancesOf ("Win32_Process")
if Process.Name = sEXEName then
bRunning=true
msgbox("I am active")
End If
next
if bRunning=False then
msgbox("I am not active.")
Shell.Run sEXEName
end if
WScript.Sleep(100)
wend
问题是它永远看不到文件正在运行,只是打开了数百个“Test_To_Stop.vbs”,这解决了我不得不重新启动计算机的问题。
在我看来,应该改变的是代码在哪里寻找。
for each Process in Service.InstancesOf ("Win32_Process")
您需要查看后台进程运行的位置,而不是查看“Win32_Process”。
我是编码新手,如果这是一个简单的问题,我很抱歉。
提前谢谢你。
问候,
毒蛇
【问题讨论】:
-
你可以使用
WshShellobject.Exec("wscript.exe ""C:\Test\Test_To_Block.vbs"""方法来运行被跟踪的脚本,这个方法返回WshScriptExec对象,检查它的.Status属性你可以得到被跟踪的进程被终止,并且重新启动它。您甚至可以将所有功能组合到一个脚本文件中,然后自动启动。 -
@omega 我喜欢你把所有东西都放在一个代码中的想法,但是如果代码有错误,它如何仍然跟踪过程,代码不就结束了吗?
-
@omega 提前致谢!
-
@omega 正如我所说,我是脚本新手,能否请您举一个方法示例。我认为它是 'Set Shell = WshShell.Exec("wscript.exe ""C:\Test\Test_To_Block.vbs""")' 然后为了检查 'If objWshShell.Status = ?????然后''重启'我不知道这是否正确,请您纠正我吗?