用户在对话窗口中选择原因后,是否可以立即在Windows Server 2008中获得关机原因?对于关闭事件,我正在使用SystemEvents.SessionEnding。 我想编写Windows服务,它将发送有关此事件的电子邮件。
或者在Windows服务器中是否有其他方式发送关于关闭/重启事件的电子邮件并获取用户输入的原因?另外,我想通知电源更换(电线/电池),但是我已经通过Kernel32.dll和gt解决了这个问题。 GetSystemPowerStatus。
答案 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)