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

Jan*_*nda 1 .net c# windows events shutdown

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

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

Alf*_*ers 5

您可以检查事件日志的关闭原因.

我在Windows Forms上组装了一个快速演示,可以适应您的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);
Run Code Online (Sandbox Code Playgroud)

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


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);
    }
}

Run Code Online (Sandbox Code Playgroud)

查看您的事件日志以查看要过滤的相应EventIds.

编译器会警告你关于不推荐使用EventID并告诉你应该使用InstanceId,但在我在这里做的快速测试中,它没有写入我的日志文件,我认为我们已经有足够的信息可以让你使用跟踪.