1

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

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

4

2 回答 2

5

您可以通过检查 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);
    }
}

查看您的事件日志以查看要过滤掉的适当 EventId。

编译器会警告您 EventID 已被弃用,并告诉您应该使用 InstanceId,但在我在这里完成的快速测试中,它没有写入我的日志文件,我认为我们已经有足够的信息让您使用追踪。

于 2009-08-22T15:08:56.960 回答
0

当然有可能。如果您想实时获取该组合框值,则需要在该进程上运行线程监视器,以便在该值更改时引发事件。

于 2009-08-22T15:08:37.867 回答