如何创建一个批处理文件来检测程序何时关闭然后重新启动应用程序?

时间:2014-07-25 01:23:04

标签: windows batch-file

有没有办法可以让程序在关闭时重新打开?

我有这个程序运行;它会弹出一个;当你按下它然后关闭程序。我知道我可以用批处理启动任何可执行文件,但是当它检测到程序已关闭时,如何让它自己运行?

我可以使用以下代码启动程序:

@echo off
start "" "C:\Program Files (x86)\Winstep\WinstepXtreme.exe"

但我想在WinstepXtreme.exe终止时启动此批处理文件。

更新:好的所以建议的代码可以工作,但是它的激活不停止使PC无法做某些事情,同时cmd窗口保持opne但我修复了。在我的进程列表中有两个文件:Nextstart.exe和Workshelf.exe,不确定是否有可以键入的代码命令,如果“workshelf.exe”已发送存在然后启动workshelf.exe?如果不存在“%ProgramFiles(x86)%”转到???

----------> [溶液]< ----------

@echo off

:重新启动 启动“编辑文本”/等待“C:\ Program Files(x86)\ Winstep \ WorkShelf.exe”

转到重启

添加workshelf.exe而不是winstep使其稳定,winstep exe启动a)下一次启动和b)工作架,只需要workhelf重启但我可以添加多个目录的东西,如果关闭则重启。

2 个答案:

答案 0 :(得分:3)

一个简单的解决方案是

@echo off
:Restart
start "Winstep Xtreme" /wait "C:\Program Files (x86)\Winstep\WinstepXtreme.exe"
goto Restart

批处理文件始终保持打开状态。只要Winstep Xtreme正在运行,就会暂停执行批处理文件。一旦此应用程序终止,批处理文件的执行将继续,再次启动 Winstep Xtreme

您希望不要仅使用此批处理文件来解决 Winstep Xtreme 试用版的限制。

答案 1 :(得分:0)

将cmd.exe的实例调整为您要监视的.exe并重新启动

@ECHO OFF

(
ECHO Set objWMIService = GetObject ("winmgmts:"^)
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO DO while proc.count ^> 0
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO if proc.count ^< 1 then exit do
ECHO wscript.sleep 5000
ECHO loop
ECHO Set WshShell=createobject("wscript.shell"^)
ECHO WshShell.run "cmd.exe", 1, true
ECHO WshShell.run "%~0", 0, false
) >%TEMP%\MonitorEXE.vbs

Start %TEMP%\MonitorEXE.vbs

mshta vbscript:msgbox("cmd.exe launched. Monitoring active.",0,"Notification")(window.close)

exit

此批处理将创建一个vbs脚本来监视该进程,并在不存在该进程实例的情况下自动重新启动该脚本。如果必须重新启动流程,则会创建一个消息框来通知已发生的消息,然后调用批处理文件以重新启动vbs Montior。

批处理将以静默方式运行(在初始启动后),并关闭,直到再次需要重新启动.exe为止。 仅显示通知。

强烈建议在监视vbs中使用“睡眠”,因为它可以大大减少调用WMI提供程序主机所涉及的CPU使用率