代码之家  ›  专栏  ›  技术社区  ›  Jan Remunda

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

  •  1
  • Jan Remunda  · 技术社区  · 15 年前

    我想编写windows服务,它将发送有关此事件的电子邮件。

    或者在windows server中是否有其他方法发送有关关机/重启事件的电子邮件,并获取用户输入的原因?另外,我想通知电源更换(电线/电池),但我已经通过Kernel32.dll解决了这个问题>GetSystemPowerStatus。

    2 回复  |  直到 12 年前
        1
  •  5
  •   CodeMonkey1313    8 年前

    您可以通过查看事件日志获取关机原因。

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

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

        2
  •  0
  •   Hassen    15 年前

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