如何知道Process已崩溃

时间:2012-02-03 16:12:18

标签: c# debugging console

在我的控制台应用程序中,我的代码看起来像

    Process DKU = new Process();
    DKU.StartInfo.FileName = "MSSQLExecutor.exe";
    DKU.Start();
    DKU.WaitForExit();
    Console.WriteLine("lets move on ");

这工作正常,它等待MSSQLExecutor.exe完成其工作,之后 应用程序继续。

我的问题是,有时MSSQLExecutor.exe崩溃,Windows默认显示一个用于结束程序的对话框。此时,我的应用程序将永远等待用户单击“关闭”按钮。

我想避免这种情况,因为我的应用程序将在没有用户交互的情况下作为服务运行。

After This I wanna to move on whit my app

4 个答案:

答案 0 :(得分:7)

Dialog会阻止该进程存在。

  1. 如果MSSQLExecutor是您的应用,则应该解决问题。 但是你可以达到目标(隐藏对话框)。处理Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException

    Application.ThreadException +=new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    
    
    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        // log the exception
    }
    
    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
        // log the exception
    }
    
  2. 如果MSSQLExecutor不是您的申请,您可以停用Dr. Watson

      

    博士。 Watson是Microsoft Windows操作系统附带的应用程序调试程序。

    • 单击“开始”,单击“运行”,在“打开”框中键入regedit.exe,然后单击“确定”。
    • 找到并单击以下注册表项:
      HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug
    • 单击AeDebug键,然后单击“注册表”菜单上的“导出注册表文件”。
    • 删除AeDebug键。
  3. 更多信息

答案 1 :(得分:5)

这是在外部进程中运行的常见问题。从here我建议为此应用程序设置最大超时值。

Process DKU = new Process();
DKU.StartInfo.FileName = "MSSQLExecutor.exe";
DKU.Start();
DKU.WaitForExit(10*60*1000);

if (!DKU.HasExited)
        DKU.Kill();

Console.WriteLine("lets move on ");

答案 2 :(得分:1)

Relevent:Detecting process crash in .NET

另外,如果你只想等待这个过程完成,你可以致电Process.Kill

答案 3 :(得分:0)

如果您不想阻止等待进程结束,请不要调用Process.WaitForExit()。这样做的目的是什么?如果您只需要知道它何时完成,请注册Process.Exited事件。在Process.Exited事件中,您可以检查Process.ExitCode以了解它是否因崩溃而结束。

相关问题