Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中获取Windows服务器关闭原因#_C#_.net_Windows_Events_Shutdown - Fatal编程技术网

C# 在C中获取Windows服务器关闭原因#

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 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,但在我在这里所做的快速测试中,它没有写入我的日志文件,我认为我们已经有足够的信息让您走上正轨