Windows服务在重启后执行不同

本文关键字:执行 重启 服务 Windows | 更新日期: 2023-09-27 18:18:50

我可能在理解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类工作正常,在重启前的服务工作正常

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

Windows服务在重启后执行不同

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

原始异常可能不会使服务崩溃,但如果在第一个异常处理程序中有第二个异常,则服务将崩溃。我会检查Logger.Instance.Error()是否抛出异常,通过在它周围放置一个try/catch。

重新启动后,代码如何执行不同?它经过完全相同的序列

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