c#检测事件是关闭还是重启

时间:2016-05-23 14:08:46

标签: c#

我知道有类似的问题已被提出,但我没有听到任何具体的问题,所以请在下载之前阅读:

我有一个程序可以在计算机关闭时关闭UPS。由于我希望UPS继续进行重启,如何判断事件是否已关闭(计算机实际上是否已关机),或者是否重启?

这标记为重复,不是案例。

我没有尝试在注销和关闭之间确定。我试图确定是否正在关闭并重新启动,这标记在文章中。

1 个答案:

答案 0 :(得分:0)

经过一些研究,我确实找到了一个可用的"回答这个......

似乎没有直接的方式,但您可以通过读取事件日志间接确定关闭类型。以下是执行此操作的方法:

    private void readEventLogs()
    {
        string query = "*[System/EventID=1074]";
        EventLogQuery elq = new EventLogQuery("System", PathType.LogName, query);
        EventLogReader elr = new EventLogReader(elq);
        EventRecord entry;
        while ((entry = elr.ReadEvent()) != null)
        {
            if (entry.TimeCreated.HasValue && entry.TimeCreated.Value.AddMinutes(1) > DateTime.Now)
            {
                string xml = entry.ToXml();
                if (xml.ToLower().Contains("restart"))
                {
                    System.IO.File.WriteAllLines(@"C:\shutdown.txt", new string[] { "RESTART" });
                }
                else if (xml.ToLower().Contains("power off"))
                {
                    System.IO.File.WriteAllLines(@"C:\shutdown.txt", new string[] { "SHUT DOWN" });
                }
            }
        }
    }

这会循环显示所有关闭事件,并找到最后一分钟内发生的事件。由于您不可能在最后一分钟关闭两次以上,这应该是您的参赛作品。

该条目包含大量信息,但我所关心的定义是它表示"重启"或者"断电"。关于这些,我通过写出一个发生的文本文件来测试。

由于这些是事件日志,因此可能会受到本地化的影响。