【问题标题】:Restart a crashed exe? [closed]重新启动崩溃的exe? [关闭]
【发布时间】:2015-09-02 17:13:31
【问题描述】:

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

【问题讨论】:

  • Process 类应该很有用。
  • 应用程序是否返回一个有效的返回码,以便您区分进程的简单结束和崩溃?
  • 如果你只运行它的一个实例,你可以看看它是否还在运行stackoverflow.com/questions/262280/…
  • 小心whatever reasoncrashes 程序因不同的原因以不同的方式崩溃,检测、清理和恢复它们的解决方案可能会因情况而异。如果您的应用程序是Not respsonding,这意味着它不再发送消息,您可以使用SendMessage 检测到,然后您可以获取应用程序命令行。终止进程并重新启动它。

标签: c# process


【解决方案1】:

我有一个想法给你。它没有检测到错误,而是在关闭时重新启动您的 exe。 (要关闭你的exe,请先关闭脚本窗口)

创建一个 .bat 文件

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

编辑

关于信息:应用程序崩溃与“无响应”状态不同。此状态意味着您的程序例如被锁定在循环中或在长时间的过程中等......崩溃意味着进程被杀死。至少对我来说:)

我为这个特定案例制作了这个脚本。

@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

为了测试这个,我启动了我的脚本。记事本启动。我要求记事本在文件过滤器中找到C:\*.* 中的“东西”。

在任务管理器中,我单击“应用程序”选项卡中的“任务结束”。出现一个带有“程序无响应”和“立即完成”选项的窗口弹出窗口。

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

【讨论】:

  • 要检测错误,请使用“errorlevel”,我找到了一个带有示例的帖子here
  • 当我的应用程序崩溃时,它会重新启动它吗?
  • 是的,因为脚本在执行您的 exe 期间等待,当 exe 关闭(或崩溃)时,脚本继续执行并执行“goto run”子句。该子句跳转到“run:”标签并再次执行您的 exe。我用它来自动重启服务器。
  • 对我不起作用,我是为计算器应用程序做的,它像这样崩溃:prntscr.com/7j66ql(我让它崩溃了)它用那个批处理脚本打开,但之后什么也没有发生崩溃。
  • 在我对“无响应”程序的回答中查看“编辑”
【解决方案2】:

首先,找出为什么您的应用程序崩溃不是一个想法吗?而不是阻止崩溃?尝试看看崩溃的原因是什么。

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

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

阅读这些可能会很好,我发现的最佳解决方案是:

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

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多