簡體   English   中英

如何知道Process已崩潰

[英]How to know that Process has crashed

在我的控制台應用程序中,我有類似的代碼

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

這工作正常,它等待MSSQLExecutor.exe完成其工作,然后應用程序繼續。

我的問題是,有時MSSQLExecutor.exe崩潰,Windows默認顯示一個用於結束程序的對話框。 此時,我的應用程序將永遠等待用戶單擊“關閉”按鈕。

我想避免這種情況,因為我的應用程序將在沒有用戶交互的情況下作為服務運行。

在此之后,我想繼續我的應用程序

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

    Dr. Watson是Microsoft Windows操作系統附帶的應用程序調試程序。

    • 單擊“開始”,單擊“運行”,在“打開”框中鍵入regedit.exe,然后單擊“確定”。
    • 找到並單擊以下注冊表項:
      HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows NT \\ CurrentVersion \\ AeDebug
    • 單擊AeDebug項,然后單擊注冊表菜單上的導出注冊表文件。
    • 刪除AeDebug鍵。

更多信息

這是在外部進程中運行的常見問題。 這里我建議為此應用程序設置最大超時值。

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

Relevent: 檢測.NET中的進程崩潰

此外,如果您只想等待這個過程完成,您可以調用Process.Kill

如果您不想阻止等待進程結束,請不要調用Process.WaitForExit()。 這樣做的目的是什么? 如果您只需要知道它何時完成,請注冊Process.Exited事件。 在Process.Exited事件中,您可以檢查Process.ExitCode以了解它是否因崩潰而結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM