繁体   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