【问题标题】:Windows service performs differently after rebootWindows 服务在重新启动后执行不同
【发布时间】:2013-06-17 19:04:06
【问题描述】:

我可能无法理解 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 应用程序中使用的外部类工作正常,在重新启动之前服务工作正常。

我将尝试获取外部类代码并更新问题。

【问题讨论】:

    标签: c# .net visual-studio-2010 service pinvoke


    【解决方案1】:

    捕获的异常如何仍然使服务崩溃(并且在某种程度上不执行恢复操作)?

    最初的异常可能不会使服务崩溃,但如果您在第一个异常处理程序中有第二个异常,服务就会崩溃。我会检查 Logger.Instance.Error() 是否通过在它周围放置一个 try/catch 来引发异常。

    重新启动后代码如何执行不同的操作?它通过完全相同的顺序。

    虽然它在您的代码中可能是相同的序列,但我们不知道在上次崩溃之前磁盘上剩余的剩余状态是什么。这可能是造成差异的原因。

    【讨论】:

    • 我不是 100% 确定,但我记得 Logger.Instance.Error() 在问题仍然存在时已被评论 - 我将在工作中查看 git tommorow。编辑了问题部分。磁盘状态实际上是我唯一的猜测,将尽快查看外部代码。
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2011-04-21
    • 2023-03-18
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多