C# Windows服务在重新启动后的性能有所不同

C# Windows服务在重新启动后的性能有所不同,c#,.net,visual-studio-2010,service,pinvoke,C#,.net,Visual Studio 2010,Service,Pinvoke,我可能在低估windows服务的行为或生命本身方面有问题 问题是: 服务意外停止,尽管设置了恢复操作,但未启动任何恢复操作。 服务在.ChangeStartMode方法调用后停止 try { normalnekurwalogowanie(Constants.Values.service_name); ServiceController svc = new ServiceController(Constants.Values.servi

我可能在低估windows服务的行为或生命本身方面有问题

问题是:

服务意外停止,尽管设置了恢复操作,但未启动任何恢复操作。 服务在.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());
}
在我的日志文件中有一个错误
打开服务管理器错误
无法打开服务管理器

现在,有几个有趣的事实: -如您所见,异常已被捕获并打印到文件中,但服务已停止 -该错误仅在重新启动后发生;在系统重新启动之前,在服务安装之后不会发生这种情况

解决方案:

在我删除了对外部
记录器
类的引用(不是我写的,我没有代码)之后,问题消失了。我不知道为什么

问题是:

  • 捕获到的异常如何仍然会使服务崩溃(并且在某种程度上不会执行恢复操作)
  • 重新启动后,代码如何执行不同的操作?它经过完全相同的序列
即使外部类可能会对我的代码产生影响,它也不会在引发异常的行之前的任何位置调用。顺便说一句,winforms应用程序中使用的外部类工作正常,在重新启动之前的服务中工作正常

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

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

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

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


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

我不是100%确定,但我记得
Logger.Instance.Error()
在问题仍然存在的时候,就在前面对其进行了注释-我将在工作时查看git tommorow。编辑了问题部分。磁盘状态实际上是我唯一的猜测,将尽快查看外部代码。