c# - 在 C# 中获取 Windows Server 关闭原因

标签 c# .net windows events shutdown

是否可以在用户在对话窗口中选择原因后立即在 Windows Server 2008 中获取关机原因?对于关闭事件,我使用的是 SystemEvents.SessionEnding。 我想编写 windows 服务,它将发送有关此事件的电子邮件。

或者在 Windows 服务器中是否有任何其他方式发送有关关闭/重启事件的电子邮件并获取用户输入的原因?另外,我想通知电源变化(电线/电池),但我已经通过 Kernel32.dll > GetSystemPowerStatus 解决了这个问题。

最佳答案

您可以通过检查 EventLog 获取关机原因。

我在 Windows 窗体上组装了一个快速演示,您可以将其适应您的 Windows 服务。

我已将 EventLog 组件添加到表单并正确配置它。下面的代码片段显示了在 InitializeComponent() 中为我通过设计器完成的设置生成的代码。


this.eventLog1.EnableRaisingEvents = true;
this.eventLog1.Log = "System";
this.eventLog1.Source = "USER32";
this.eventLog1.SynchronizingObject = this;
this.eventLog1.EntryWritten += new System.Diagnostics.EntryWrittenEventHandler(this.eventLog1_EntryWritten);

在事件处理程序上,您将拥有以下内容:


private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e)
{
    EventLogEntry entry = e.Entry;
    if (e.Entry.EventID == 1074)
    {
        File.AppendAllText(@"c:\message.txt", entry.Message);
    }
}

查看您的事件日志以查看要过滤掉的适当 EventId。

编译器会警告你 EventID 被弃用并告诉你你应该使用 InstanceId,但在我在这里做的快速测试中,它没有写入我的日志文件,我认为我们已经有足够的信息来让你走上正轨。

关于c# - 在 C# 中获取 Windows Server 关闭原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1315858/

相关文章:

c# - Dictionary<string, bool?> 错误 - 集合已修改;枚举操作可能无法执行

c# - 从 XML 中提取一小部分数据

windows - 我如何使这个 MS 更新批量卸载程序工作?

c++ - 使用 Loadlibrary ("cmd.exe")但不起作用

c++ - ROS2 colcon 构建在 Windows 中不显示任何错误消息

c# - 为什么 WebApi Controller 运行后没有人处理 DbContext?

c# - 使用包含许多重叠可能性的两个列表的一对一匹配算法

c# - DataGridView 选中行到DataTable

c# - 如何在 aspx 页面的服务器脚本 block 中使用 [WebMethod]?

c# - Entity Framework 核心 : Guid Greater Than for Paging