簡體   English   中英

Windows服務在重新啟動后執行不同

[英]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 ErrorUnable to open Service Manager

現在,有幾個有趣的事實:-如您所見,捕獲了異常並將其打印到文件中,但服務已停止-僅在重新啟動后才發生錯誤; 服務安裝后,在系統重新啟動之前不會發生

解決方案:

刪除對外部Logger類的引用(不是我寫的,沒有代碼)后,問題消失了。 我不知道為什么

問題:

  • 如何捕獲異常仍會使服務崩潰(並以某種方式不執行恢復操作)?
  • 重新啟動后代碼如何表現不同? 它通過完全相同的順序。

即使外部類可能對我的代碼產生影響,也不會在引發異常的行之前的任何地方調用它。 順便說一句,在winforms應用程序中使用的externall類工作正常,在重新啟動之前可以正常使用。

我將嘗試獲取外部類代碼並更新問題。

如何捕獲異常仍會使服務崩潰(並以某種方式不執行恢復操作)?

原始異常可能不會使服務崩潰,但是如果您的第一個異常處理程序中有第二個異常,則服務將崩潰。 我會檢查Logger.Instance.Error()是否通過在其周圍放置try / catch引發異常。

重新啟動后代碼如何表現不同? 它通過完全相同的順序。

盡管代碼中的序列可能相同,但是我們不知道在上次崩潰之前磁盤上還剩下什么殘留狀態。 這可能是造成差異的原因。

暫無
暫無

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

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