2016-05-23 69 views
3

我知道類似的問題已經被問過,但我沒有聽到任何明確涵蓋這一點,所以請downvoting前閱讀:C#檢測,如果事件是關機或重新啓動

我有一個關閉一個程序UPS在計算機關機的情況下。由於我希望UPS保持重啓狀態,我如何確定事件是否是關機(電腦實際關機),還是重啓?

這被標記爲重複,不是這種情況。

我不想確定註銷和關機。我試圖確定正在關機並重新啓動,這不包括在標記的文章中。

+0

查看事件日誌,啓動時有一個特定的ID,意外事件是6008.因此可以檢查它是否意外。 – BugFinder

+1

不是我所要求的 - 在關機期間需要知道,而不是在啓動期間 – oppassum

+0

如果您告知UPS關機,您是否有可能在比賽中查看計算機是否可以在電源斷電之前成功執行關機處理突然從它刪除? –

回答

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" }); 
       } 
      } 
     } 
    } 

這將循環使用所有的關機事件,並找到一個在最後一分鐘內發生的。由於你不太可能在最後一刻關閉了兩次以上,所以這應該是你的入門。

該條目包含大量的信息,但我關心的定義之一是它表示「重啓」或「斷電」。依靠這些,我通過寫出一個文本文件來測試哪一個發生了。

由於這些是事件日誌,它們可能會受到本地化的影響。