[英]How to know if a System.Diagnostic.Process has exited due to timeout?
[英]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可防止進程存在。
如果MSSQLExecutor
是您的應用程序,您應該解決問題。 但是你可以達到目標(隱藏對話框)。 處理Application.ThreadException
和AppDomain.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 }
如果MSSQLExecutor
不是您的應用程序,您可以停用Dr. Watson
Dr. Watson是Microsoft Windows操作系統附帶的應用程序調試程序。
這是在外部進程中運行的常見問題。 從這里我建議為此應用程序設置最大超時值。
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.