当前位置:  开发笔记 > 编程语言 > 正文

检测并重新启动崩溃的.NET应用程序

如何解决《检测并重新启动崩溃的.NET应用程序》经验,为你挑选了3个好方法。

如何检测我的.NET应用程序崩溃,然后重新启动它?



1> Hosam Aly..:

另一个解决方案(基于此示例)是创建一个控制应用程序的启动器:

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);
        }
    }



2> RoadWarrior..:

如果这是一个Windows窗体应用程序:

App.Config中设置jitDebugging = true.这可以防止触发内置的Windows窗体未处理的异常处理程序.

现在无论这是Windows窗体应用程序还是控制台应用程序:

注册Application.ThreadException事件,例如在C#中:

Application.ThreadException + = new Threading.ThreadExceptionHandler(CatchFatalException);

此时,您的应用已经进入黑洞.接下来会发生什么取决于这是否是Windows窗体应用程序:

如果它是Windows窗体应用程序,请在CatchFatalException事件处理程序中调用Application.Restart方法.

否则,您将需要p/invoke到应用程序重新启动和恢复本机功能.该链接讨论了Vista,但在我的测试中,它在XP上运行得很好.



3> Marc Gravell..:

在AppDomain中运行工作; 使用主AppDomain来监视它(但不防止进程终止)

很多异常处理!即不要让致命的错误推翻这个过程

在已经内置了回收的东西中运行它 - 例如IIS

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有