我已經在C#中創建了一個控制檯應用程序。我怎麼知道它是否崩潰並再次運行?如何運行C#控制檯應用程序(如果崩潰)
回答
你可以嘗試這樣的事:
static void Main(string[] args)
{
try
{
// Application code goes here
}
catch (Exception)
{
var applicationPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
Process.Start(applicationPath);
Environment.Exit(Environment.ExitCode);
}
}
基本上,包裝所有的代碼在try/catch
,如果任何異常發生時,程序將與System.Reflection.Assembly.GetExecutingAssembly().Location;
檢索.exe
位置,然後調用Process.Start
運行再次申請。
我寧願處理AppDomain.CurrentDomain.UnhandledException事件,而不是此解決方案。因此,您可以在可以從中恢復的情況下使用try/catch。 –
如果發生堆棧溢出或超出記憶異常等異常,此功能將不起作用 –
在異常情況下物理退出和重新啓動有什麼意義? – ThePerplexedOne
您應該從另一個應用程序(看門狗,sheduler,procmon,servman,...)控制您的控制檯應用程序。
E.g.您可以將您的控制檯應用程序創建爲服務並通過服務管理器進行控制。
您可以使用一個看門狗處理您的顯示器,並重新啓動它,如果墜毀: 見:What's the best way to watchdog a desktop application?
您可以使用Windows服務,而不是和設置它的恢復選項,如下所示:https://serverfault.com/questions/48600/how-can-i-automatically-restart-a-windows-service-if-it-crashes
您可以使用任務管理器中的計劃任務定期啓動應用程序,並將其設置爲僅在上次運行已結束時才啓動: https://support.microsoft.com/en-us/kb/323527
如果我正確理解您的問題,您希望在發生崩潰時嘗試重新啓動控制檯應用程序。在C#console-apps中,定義爲入口點的方法(通常爲static void main
)是應用程序中調用堆棧的根。您基本上需要遞歸調用該方法。如果應用程序處於某種意外或不可恢復的狀態,您將需要確保應用程序最終失敗。
例如,在主類:
static int retryCount;
const int numberOfRetries = 3;
static void Main(string[] args)
{
try
{
var theApp = new MyApplicationType(args);
theApp.StartMyAppLogic();
}
catch (ExpectedExceptionType expectThisTypeOfException)
{
thisMethodHandlesExceptions(expectThisTypeOfException);
}
catch (AnotherExpectedExceptionType alsoExpectThisTypeOfException)
{
thisMethodHandlesExceptions(alsoExpectThisTypeOfException);
}
catch (Exception unexpectedException)
{
if(retryCount < numberOfRetries)
{
retryCount++;
Main(args);
}
else
{
throw;
}
}
}
感謝您修復我的錯誤代碼@FrédéricHamidi! –
沒問題。這不是*那*不好;) –
- 1. vb.net控制檯應用程序崩潰
- 2. 崩潰控制檯應用程序
- 3. 運行C#控制檯應用程序
- 4. 如何使用powershell運行C#控制檯應用程序
- 5. 如何使用C++應用程序運行控制檯
- 6. 如何測量C#控制檯應用程序運行時間?
- 7. C++ WinAPI - WriteConsoleOutputCharacter崩潰控制檯應用程序
- 8. 如何從控制檯應用程序運行程序?
- 9. 從Windows服務運行時控制檯程序崩潰
- 10. 如何在後臺運行.NET控制檯應用程序
- 11. 如何在後臺運行控制檯應用程序(無UI)?
- 12. 如果在特殊用戶下運行,應用程序崩潰
- 13. 如何使C#應用程序崩潰
- 14. 控制檯應用程序崩潰/未響應
- 15. 如果應用程序崩潰,JUnique鎖定的應用程序不會運行
- 16. 從cmd.exe運行時,基於C的控制檯應用程序崩潰,在VS2008調試器中運行良好?
- 17. 我如何從java控制檯運行控制檯應用程序?
- 18. 如何在後臺連續運行c#控制檯應用程序
- 19. 從其他控制檯應用程序運行控制檯應用程序
- 20. 如何使用控制檯運行jnlp應用程序?
- 21. C++控制檯程序崩潰,並且沒有任何錯誤
- 22. 如何在MVC中運行控制檯應用程序
- 23. 如何運行應用程序並不顯示控制檯?
- 24. 如何從Windows Service運行控制檯應用程序?
- 25. NetBeans IDE - 如何通過控制檯運行Java應用程序
- 26. 如何創建運行控制檯應用程序的按鈕?
- 27. 如何一直運行Java控制檯應用程序?
- 28. 如何在Heroku上運行控制檯應用程序?
- 29. 如何從控制檯應用程序運行InstallScript項目
- 30. 如何在Azure上運行控制檯應用程序?
你運行它。如果它意外消失,它會崩潰。:-)。但是,嚴肅地說,你是什麼意思? –
您可以從使用System.Diagnostics的其他應用程序啓動,也可以使用Windows任務計劃程序啓動它。我們需要一些更多的信息才能更有幫助 –
您的控制檯應用程序是否返回零以外的「成功」退出代碼。然後編寫一個啓動程序啓動它,然後等待它退出。如果退出代碼不是特殊的「成功」代碼,請再次啓動控制檯應用程序。 –