c# - 如何从 Windows 服务 C# 取消关闭

标签 c# windows-services c#-2.0 system-shutdown

我启动了一个 Windows 服务(用 C# .net2.0 编写)。

我想检测计算机何时关闭/重启并取消它。 取消后我想做一些操作并重新启动 Windows。

我试过了,还是不行

using Microsoft.Win32;
partial class MyService: ServiceBase
{
    protected override void OnStart(string[] args)
    {
        SystemEvents.SessionEnding += new SessionEndingEventHandler(OnSessionEnding);
    }

    private void OnSessionEnding(object sender, SessionEndingEventArgs e)
    {
        e.Cancel = true;
        //Do some work...
    }
}

另一个测试:

partial class MyService: ServiceBase
{
    protected override void OnShutdown()
    {
        //Do some work...
        //base.OnShutdown();
    }
}

最佳答案

我不会惹这个的。 Windows 会将您的进程视为挂起的进程(除非您直接转到 Win32 API)。

我的建议是注意您正在关闭,并可能安排事件在启动时发生?

更新:
我想你会被困在这里,因为你的服务不知道 为什么 Windows 正在关闭。你将有一个无限循环:

  • Windows 关机触发。
  • 服务通知、中止关闭、启动应用。
  • 用户使用应用程序继续关机。
  • 窗口关闭触发。
  • 服务通知......

关于c# - 如何从 Windows 服务 C# 取消关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2720125/

相关文章:

c# - 为什么 DataGrid 不显示示例设计时数据?

c# - NET 6 : Windows Service with strongly typed configuration

windows-services - 在 Windows 服务中使用 PsExec 退出代码 6

sql-server - windows服务sql连接问题

c# - 如何使两种方式将 numericUpDown 绑定(bind)到成员类

c# - 列表中的最大日期时间

c# - MetadataAddress 或 Authority 必须使用 HTTPS,除非通过设置 RequireHttpsMetadata=false 禁用开发

c# - 无法加载文件或程序集 'Microsoft.SqlServer.BatchParserClient.dll 文件名

c# - Windows 应用商店应用程序是否有 Deep Zoom 的替代方案?

c# - 如何压缩文件