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



是否有一种方法可以使程序在关闭时重新打开?

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

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

@echo off
start "" "C:Program Files (x86)WinstepWinstepXtreme.exe"

但是我希望这个批处理文件在WinstepXtreme.exe终止时启动。

更新:好的,所以建议的代码工作,但它的激活不停止使PC无法做某些事情,也cmd窗口保持打开,但我修复了这一点。在我的进程列表中有两个文件:Nextstart.exe和Workshelf.exe,不确定是否有一个代码命令,你可以在那里输入,如果"Workshelf.exe"是否存在,然后启动Workshelf.exe ?如果不存在"%ProgramFiles(x86)%" Goto??

---------->[ 解决方案]& lt ;----------

@echo了

:重新启动启动"编辑文本"/等待"C:Program Files (x86)WinstepWorkShelf.exe"

goto重启

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

一个简单的解决方案是

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

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

希望您不使用这个批处理文件只是为了解决Winstep Xtreme的试用版的限制。

将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 monitor。

批处理静静地运行(在它的初始启动之后),并被关闭,直到需要再次重新启动。exe只有通知才会显示。

强烈建议在监视vbs中使用'Sleep',因为它可以显着减少调用WMI提供程序主机

所涉及的CPU占用

一个简单的解决方案是像下面这样关闭应用程序并重新开始

@taskkill /f /im WinstepXtreme.exe >nul
@timeout /t 3 /nobreak >nul
@start C:"Program Files (x86)"WinstepWinstepXtreme.exe >nul
@echo restart complete

最新更新