重启一个崩溃的exe?

时间:2015-06-17 12:48:01

标签: c# process

我有一个应用程序(不是我编写的应用程序,但只有一个),无论出于何种原因,它会在一定时间后崩溃。无论如何,我可以检测到,那个exe崩溃并重新启动它?我搜索了高低,我发现的只是一个“无响应”代码来检测它,它根本不起作用。有任何想法吗?我知道我没有任何关于我尝试过的例子,但说实话我只发现了一件事而且失败了,所以我没有想法。谢谢!

2 个答案:

答案 0 :(得分:5)

我有个你的想法。它没有检测到错误,但在关闭时重启你的exe。 (要关闭你的exe,关闭之前的脚本窗口)

创建.bat文件

@echo off
:run
/path/to/your/exefile.exe
goto run

修改

有关信息:应用程序崩溃与#34;无响应"状态。这种状态意味着您的程序被锁定在循环中,例如在长程序等中... ...崩溃,意味着该进程被杀死。对我来说至少:))

我为这个特定情况制作了这个脚本。

@echo off

:run

REM kill your exe if not responding
taskkill /f /im "notepad++.exe" /fi "STATUS eq NOT RESPONDING" >nul

tasklist /nh /fi "imagename eq notepad++.exe" /fi "status eq running" | find  /i "notepad++.exe"  >nul && ( 
    echo Notepad is running
    REM program running nothing to do
) || ( 
    echo Notepad was not found ! Restarting notepad...
    REM start for launch .exe without waiting
    start "C:\Program Files (x86)\Notepad++" notepad++.exe
)

REM Wait 1 second
timeout /t 01>nul 

goto run

为了测试这个,我启动了我的scrpit。记事本已启动。我要求记事本找到"某事"在文件过滤器C:\*.*

在任务管理器中,我点击"任务结束"在"应用"标签。 Windows弹出窗口显示"程序未响应"和"现在结束"选项。

并且立即(取决于此行timeout /t 01>nul),脚本重新启动记事本!

答案 1 :(得分:0)

首先,找出为什么你的应用程序崩溃是不明智的?而不是阻止崩溃?试着看看崩溃的原因是什么。

但是,如果您只想检测并停止崩溃,可能需要查看以下解决方案:

Best way to detect an application crash and restart it
How do I detect an application crash

阅读这些内容可能会很好,我找到的最佳解决方案是:

如何创建一个包装器应用程序,作为一个孩子启动故障应用程序并等待它?如果子项的退出代码指示错误,则重新启动它,否则退出。 (答案取自Vinko Vrsalovic