gpt4 book ai didi

c# - Windows 服务在重启后执行不同

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:40 25 4
gpt4 key购买 nike

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

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

最佳答案

How can caught exception still crash the service (and in a way recovery actions are not performed)?

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

How can code perform differently after reboot? It goes thru exactly same sequence.

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

关于c# - Windows 服务在重启后执行不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com