C# Windows 服务无法将关闭事件记录到远程 API

Posted

技术标签:

【中文标题】C# Windows 服务无法将关闭事件记录到远程 API【英文标题】:C# Windows Service Fails To Log Shutdown Event to Remote API 【发布时间】:2021-08-19 19:07:03 【问题描述】:

我正在生成一个 C# windows 服务来记录特定的 windows 事件。虽然它们中的大多数都很好(登录/关闭、锁定/解锁等),但我在 Windows 关机类型事件方面遇到了一些问题。我正在尝试的代码如下(摘自其他地方的其他建议)。

对于服务:-

public Service()
        
            InitializeComponent();
            SystemEvents.SessionEnded += new SessionEndedEventHandler(SystemEvents_SessionEnded);
            SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);

        

对于 SystemEvents_SessionEnded :-

void SystemEvents_SessionEnded(object sender, SessionEndedEventArgs e)
        
            switch (e.Reason)
            
                case SessionEndReasons.SystemShutdown:
                    eventType = 7;
                    break;
                case SessionEndReasons.Logoff:
                    eventType = 2;
                    break;
                default:
                    break;
            

            \\Send eventType and current DateTime to remote API
        

对于 SystemEvents_PowerModeChanged

static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
        
            switch (e.Mode)
            
                case PowerModes.Suspend:
                    eventType = 5;
                    break;
                case PowerModes.Resume:
                    eventType = 6;
                    break;
                default:
                    break;
            

            \\Send eventType and current Datetime to API
        

由于 API 托管在本地计算机的外部,我假设我的服务依赖于其他人通过网络发送数据?关于是否是我的代码失败或我是否需要更好的依赖项设置的任何建议?

提前致谢。

【问题讨论】:

SessionEnded Docs 说 仅当消息泵正在运行时才会引发此事件。 在 Windows 服务中,除非使用隐藏表单或手动启动消息泵,否则不会引发此事件。 示例代码显示如何使用隐藏表单处理系统事件在 Windows 服务中,请参阅 SystemEvents 类。 太好了,感谢您提供的信息,我已将代码移至第二个链接中提供的结构中,现在正在触发。 【参考方案1】:

SessionEnded Docs 说:

仅当消息泵正在运行时才会引发此事件。在 Windows 服务中,除非使用隐藏表单或已手动启动消息泵,否则不会引发此事件。有关如何使用隐藏表单处理系统事件的代码示例在 Windows 服务中,请参阅 SystemEvents 类。

【讨论】:

以上是关于C# Windows 服务无法将关闭事件记录到远程 API的主要内容,如果未能解决你的问题,请参考以下文章

远程 Windows 事件记录 - 授权

如何防止远程进程在 Windows 中被关闭?

记录使用mRemoteNG软件启动后无法进行复制粘贴

安装oracle11的时候 提示ORA-28056 未能将审计记录写入windows事件日志,这是怎么回事啊

无法将 C# 应用程序连接到 MSSQL

无法通过 RDP 连接到 Windows 服务器 [关闭]