2012-06-25 40 views
1

我有一個應用程序,需要獲得最後一次關機時間。我使用EventLog類來獲取關機時間。我有單獨的類文件,旨在讀取/寫入事件日誌。 ReadPowerOffEvent函數旨在獲取關機事件。如何獲得最後一次關機時間使用C#

public void ReadPowerOffEvent() 
    { 
     EventLog eventLog = new EventLog(); 
     eventLog.Log = logName; 
     eventLog.MachineName = machineName; 

     if (eventLog.Entries.Count > 0) 
     { 
      for (int i = eventLog.Entries.Count - 1; i >= 0; i--) 
      { 
       EventLogEntry currentEntry = eventLog.Entries[i]; 

       if (currentEntry.InstanceId == 1074 && currentEntry.Source=="USER32") 
       { 
        this.timeGenerated = currentEntry.TimeGenerated; 
        this.message = currentEntry.Message; 
       } 
      } 
     } 
    } 

但是,只要它試圖獲取事件條目數,就會拋出一個IOException,指出「找不到網絡路徑」。我試圖解決,但我失敗了。請幫助我...

+0

您可以使用[本答案] [1]確定使用WMI的正常運行時間。 [1]:http://stackoverflow.com/questions/972105/retrieve-system-uptime-using-c-sharp – Kane

+1

我覺得這個老問題的幫助you.http://stackoverflow.com/問題/ 1631933 /獲取日期時間的最後窗口關閉事件使用網 –

+3

@凱恩,我做了這個系統時間的事情已經在我的應用程序。我的問題是要獲取PC上次關機的時間,並檢測它是關機事件還是重新啓動並計算關機時間。這就是爲什麼我需要使用EventViewer。反正,謝謝。 – jchoudhury

回答

0

您必須在計算機上運行「遠程註冊表」服務(或要運行此應用程序的機器上)。我懷疑這個服務設置爲手動在你的機器上啓動。您可能必須將此服務的設置更改爲自動。

如果此應用程序將在其他機器上運行,您可能需要在應用程序中添加一些邏輯以檢查以確保此服務首先運行。如果不是,那麼你需要通過你的應用程序啓動它。

注:

的「遠程註冊表」服務使遠程用戶能修改你的計算機上的註冊表設置。默認情況下,「Remote Registry」服務的「啓動類型」設置可能設置爲「自動」或「手動」,這對於單個用戶(或)筆記本個人電腦用戶來說是一種安全風險。 因此,要確保只有您的計算機上的用戶可以修改系統註冊表,請禁用此「遠程註冊表」服務。

相關問題