[英]Windows service performs differently after reboot
我可能會低估Windows服務的行為或生活本身。
問題:
該服務異常停止,盡管已設置,但未執行任何恢復操作。 服務調用ServiceHelper .ChangeStartMode方法后停止
try
{
normalnekurwalogowanie(Constants.Values.service_name);
ServiceController svc = new ServiceController(Constants.Values.service_name);
if (svc != null)
{
ServiceHelper.ChangeStartMode(svc, (automatic ? ServiceStartMode.Automatic : ServiceStartMode.Manual));
svc.Close();
}
else
normalnekurwalogowanie("null");
}
catch (Exception ex)
{
//Logger.Instance.Error("Error message: {0}\nError Stack Trace: {1}", new object[] { ex.Message, ex.StackTrace });
normalnekurwalogowanie(ex.ToString());
}
在我的日志文件中,有一個錯誤Open Service Manager Error
: Unable to open Service Manager
現在,有幾個有趣的事實:-如您所見,捕獲了異常並將其打印到文件中,但服務已停止-僅在重新啟動后才發生錯誤; 服務安裝后,在系統重新啟動之前不會發生
解決方案:
刪除對外部Logger
類的引用(不是我寫的,沒有代碼)后,問題消失了。 我不知道為什么
問題:
即使外部類可能對我的代碼產生影響,也不會在引發異常的行之前的任何地方調用它。 順便說一句,在winforms應用程序中使用的externall類工作正常,在重新啟動之前可以正常使用。
我將嘗試獲取外部類代碼並更新問題。
如何捕獲異常仍會使服務崩潰(並以某種方式不執行恢復操作)?
原始異常可能不會使服務崩潰,但是如果您的第一個異常處理程序中有第二個異常,則服務將崩潰。 我會檢查Logger.Instance.Error()
是否通過在其周圍放置try / catch引發異常。
重新啟動后代碼如何表現不同? 它通過完全相同的順序。
盡管代碼中的序列可能相同,但是我們不知道在上次崩潰之前磁盤上還剩下什么殘留狀態。 這可能是造成差異的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.