C# 在C中获取Windows服务器关闭原因#
用户在对话框窗口中选择关机原因后,是否可以立即在Windows Server 2008中获取关机原因?对于关机事件,我使用SystemEvents.SessionEnding。 我想编写windows服务,它将发送有关此事件的电子邮件 或者在windows server中是否有其他方法发送有关关机/重启事件的电子邮件,并获取用户输入的原因?另外,我想通知电源更改(电线/电池),但我已经通过Kernel32.dll>GetSystemPowerStatus解决了这个问题。确保这是可能的。 如果您希望实时获取该组合框值,则需要在该进程上运行线程监视器,以便在该值更改时引发事件。确保这是可能的。C# 在C中获取Windows服务器关闭原因#,c#,.net,windows,events,shutdown,C#,.net,Windows,Events,Shutdown,用户在对话框窗口中选择关机原因后,是否可以立即在Windows Server 2008中获取关机原因?对于关机事件,我使用SystemEvents.SessionEnding。 我想编写windows服务,它将发送有关此事件的电子邮件 或者在windows server中是否有其他方法发送有关关机/重启事件的电子邮件,并获取用户输入的原因?另外,我想通知电源更改(电线/电池),但我已经通过Kernel32.dll>GetSystemPowerStatus解决了这个问题。确保这是可能的。 如果您希
如果您希望实时获取该组合框值,则需要在该进程上运行线程监视器,以便在该值更改时引发事件。您可以通过查看事件日志获得关机原因 我在Windows窗体上组装了一个快速演示,您可以根据自己的Windows服务进行调整 我已经在表单中添加了一个事件日志组件,并对其进行了正确配置。下面的代码段显示了在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);
}
}
查看事件日志以查看要筛选的适当事件ID
编译器将警告您EventID已被弃用,并告诉您应该使用InstanceId,但在我在这里所做的快速测试中,它没有写入我的日志文件,我认为我们已经有足够的信息让您走上正轨。您可以通过检查EventLog获得关机原因 我在Windows窗体上组装了一个快速演示,您可以根据自己的Windows服务进行调整 我已经在表单中添加了一个事件日志组件,并对其进行了正确配置。下面的代码段显示了在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);
}
}
查看事件日志以查看要筛选的适当事件ID
编译器将警告您EventID已被弃用,并告诉您应该使用InstanceId,但在我在这里所做的快速测试中,它没有写入我的日志文件,我认为我们已经有足够的信息让您走上正轨