如何检测我的.NET应用程序崩溃,然后重新启动?检测并重新启动崩溃的.NET应用程序
回答
另一种解决方案(基于this example)是创建控制应用程序的启动:
class LauncherProgram
{
static int count = 3;
static void Main()
{
Launch();
Thread.Sleep(Timeout.Infinite);
}
static void Launch()
{
Process process = new Process();
process.StartInfo.FileName = "MyApp.exe";
process.EnableRaisingEvents = true;
process.Exited += LaunchIfCrashed;
}
static void LaunchIfCrashed(object o, EventArgs e)
{
Process process = (Process) o;
if (process.ExitCode != 0)
{
if (count-- > 0) // restart at max count times
Launch();
else
Environment.Exit(process.ExitCode);
}
else
{
Environment.Exit(0);
}
}
唯一可能的升级方法是将“看门狗”设置为Windows服务。 – 2009-02-08 15:02:10
更好地添加一些时间戳代码并检测应用程序是否在启动时崩溃 – Sean 2014-08-06 01:45:39
一个可能的解决方案是创建另一个进程监视应用程序,并重新启动它,如果它被终止:
class ProcessMonitorProgram
{
const string myProcess = "MyApp.exe";
static void Main()
{
new Timer(CheckProcess, null, 0, 60 * 1000);
Thread.Sleep(Timeout.Infinite);
}
static void CheckProcess(object obj)
{
if (Process.GetProcessesByName(myProcess).Length == 0)
Process.Start(myProcess);
}
}
一个与此解决方案的问题是,它会保持进程重启永远,直到这个监控应用程序本身被终止。
- 运行一个AppDomain内的工作;使用主AppDomain来监视它(虽然不防止进程kill)
- 大量的异常处理!即不要让一个致命的错误推倒过程
- 在一些已经有内置的循环来看,这 - IIS例如
如果这是一个Windows窗体应用程序:
- 套装jitDebugging = true in App.Config。这可以防止内置的Windows窗体未处理的异常处理程序被触发。
现在无论这是一个Windows窗体应用程序或一个控制台应用程序:
注册为Application.ThreadException事件,例如在C#中:
Application.ThreadException + = new Threading.ThreadExceptionHandler(CatchFatalException);
此时,您的应用程序已进入黑洞。接下来会发生什么取决于这是否是一个Windows窗体应用程序:如果它是一个Windows窗体应用程序
- ,请致电您的CatchFatalException事件处理Application.Restart方法。
- 否则,您将需要p /调用application restart and recovery本地函数。该链接讨论Vista,但在我的测试中,它在XP上的工作情况也很好。
- 1. 检测应用程序崩溃并重新启动它的最佳方法?
- 2. 重新启动代理程序崩溃
- 3. 应用程序在重新启动活动时崩溃
- 4. 应用程序在手动kill后重新启动时崩溃
- 5. 以编程方式重新启动应用程序崩溃
- 6. 应用程序在手机的重新启动时崩溃
- 7. 当它崩溃时重新启动Silverlight应用程序?
- 8. Android应用程序崩溃时重新启动
- 9. 快速退出时应用程序崩溃+重新启动
- 10. Android应用程序崩溃后重新启动
- 11. 应用程序重新启动太快时崩溃
- 12. 在崩溃时重新启动应用程序
- 13. Web应用程序重新启动jni崩溃?
- 14. 崩溃后重新启动ASP.NET核心应用程序
- 15. Android:应用程序崩溃应用程序重新启动Facebook登录
- 16. 监视程序并在崩溃时重新启动它
- 17. 启动时Unity应用程序崩溃
- 18. iOS应用程序崩溃时启动
- 19. 当启动应用程序时崩溃
- 20. 启动时应用程序崩溃(iOS)
- 21. 应用程序崩溃启动电话
- 22. AIR应用程序 - 启动崩溃
- 23. Android应用程序崩溃启动
- 24. Mapbox应用程序崩溃时启动
- 25. 崩溃后启动应用程序
- 26. 启动时应用程序崩溃。
- 27. C#.NET应用程序在启动后立即崩溃
- 28. 在Android中检测“崩溃服务的重新计划重启”
- 29. 如何在Android中崩溃时以编程方式重新启动/重新启动应用程序?
- 30. 重新开启appcelerator应用程序崩溃
我发现这个问题的一些解决方案(之前我问),所以我认为这将是很好的答案在SO。如果您有其他答案,请成为我的客人。或者只是投票指导其他人的最佳答案。如果您认为合适,请重新提交此问题。 – 2009-02-08 14:43:15
添加了关于重新启动控制台应用程序的信息,因为这显然是您正在使用的。 – RoadWarrior 2009-02-09 09:30:35