首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中获取Windows Server关闭原因

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

Stack Overflow用户
提问于 2009-08-22 12:12:25
回答 2查看 2.7K关注 0票数 1

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

或者,在windows server中,有没有其他方式可以发送关于关机/重启事件的电子邮件,并得到用户输入的原因?另外,我想通知电源的变化(电力线/电池),但是我已经通过Kernel32.dll > GetSystemPowerStatus解决了这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-22 15:08:57

您可以通过检查EventLog来获取关机原因。

我在Windows窗体上组装了一个快速演示,您可以根据您的Windows服务进行调整。

我已经向表单添加了一个EventLog组件,并对其进行了正确的配置。下面的代码片段显示了在InitializeComponent()中为我通过设计器传递的设置生成的代码。

代码语言:javascript
复制
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);

在事件处理程序上,您将看到以下内容:

代码语言:javascript
复制
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,但在我这里所做的快速测试中,它没有写入到我的日志文件中,我认为我们已经有了足够的信息来让您走上正轨。

票数 5
EN

Stack Overflow用户

发布于 2009-08-22 15:08:38

当然这是可能的。如果您希望实时获取Thread值,则需要在该进程上运行comboBox监视器,以便在该值更改时引发事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1315858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档