在用户选择对话框窗口中的原因后,是否可以立即获得Windows Server 2008中的关机原因?对于关闭事件,我使用SystemEvents.SessionEnding。我想编写windows服务,它将发送有关此事件的电子邮件。
或者,在windows server中,有没有其他方式可以发送关于关机/重启事件的电子邮件,并得到用户输入的原因?另外,我想通知电源的变化(电力线/电池),但是我已经通过Kernel32.dll > GetSystemPowerStatus解决了这个问题。
发布于 2009-08-22 15:08:57
您可以通过检查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);
}
}查看您的事件日志以查看要过滤的适当EventIds。
编译器将警告您EventID已被弃用,并告诉您应该使用InstanceId,但在我这里所做的快速测试中,它没有写入到我的日志文件中,我认为我们已经有了足够的信息来让您走上正轨。
发布于 2009-08-22 15:08:38
当然这是可能的。如果您希望实时获取Thread值,则需要在该进程上运行comboBox监视器,以便在该值更改时引发事件。
https://stackoverflow.com/questions/1315858
复制相似问题