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

时间:2009-08-22 12:12:25

标签: c# .net windows events shutdown

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

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

2 个答案:

答案 0 :(得分:5)

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

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

查看您的事件日志,查看要过滤的相应EventIds。

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

答案 1 :(得分:0)

确定它是可能的。 如果您想实时获取该comboBox值,则需要在该进程上运行一个Thread监视器,以便在该值发生更改时引发事件。