【问题标题】:why did Windows 10 kill my worker thread in my Windows Service?为什么 Windows 10 在我的 Windows 服务中杀死了我的工作线程?
【发布时间】:2020-03-06 05:24:23
【问题描述】:

我使用 Visual Studio 2015 在 .NET 4 和 C# 中实现了一个 Windows 服务。在 OnStart 方法中,我的服务创建了一个循环的“工作线程”,阻塞了 AutoResetEvent(连接到 @987654323 @)。 “工作线程”也有一个CancellationTokenSource,它手动轮询以检查它是否应该停止工作。 OnStop 方法首先使用 CancellationTokenSource 取消,然后使用 AutoResetEvent 发出信号,唤醒通知“取消”发生的 Worker 线程,然后退出。

此 Windows 服务在 Win7 上运行良好。我已经在 Win10 上安装了几次,它运行良好 - 直到昨天我看到一个日志文件,它说工作线程按预期阻止了 AutoResetEvent,但是:那个工作线程从未到达我的下一条语句程序。它从未醒来,没有执行另一条语句。阻塞94秒后,服务结束。

请注意,在这种情况下,我的 OnStop 方法未被调用

整个进程没有被杀死 - 有一个线程 (threadID 1) 可能来自 SCM 或操作系统,并且在我的服务终止之前一直阻塞 - 那个 线程记录了一个出去的时候有几条消息。

这是我的问题:Windows 服务控制管理器 (SCM) 是否认为有必要实际终止应用程序线程?谁能解释为什么我的线程死了?

【问题讨论】:

    标签: windows-10 windows-services


    【解决方案1】:

    对原始问题的简短回答

    我发现重新启动机器导致我的线程死亡(有趣的是,Windows 分配的线程并没有死亡,它只是退出了 - 我猜这就是 SCM 在被告知关闭时清理服务的方式)。

    更长的答案 - 现在我有一个新问题

    我没有意识到我找错了树。我的客户端应用程序说该服务不可用,我认为这是因为我上面描述的 - 因为它被杀死了。

    不是问题 - 问题是,服务一旦停止(因为关机),就不会再次重新启动!

    那么为什么我的 .NET 4 Automatic 服务没有在 Win10 中自动启动?那是一个不同的问题。

    新的答案

    我已经发布了我最初的问题,发现了几个回答新问题的帖子:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2016-04-21
      相关资源
      最近更新 更多