2012-09-30 51 views
3

看看下面的C#代碼:GetEventLogs()返回沒有安裝事件日誌?

EventLog[] eventLogs; 
eventLogs = EventLog.GetEventLogs(computername); 
foreach (EventLog evt in eventLogs) 
{ 
    statusMessagesListBox.Items.Add("evt.Log.ToString(): " + evt.Log.ToString() + "\t\tevt.LogDisplayName: " + evt.LogDisplayName); 
} 

當我運行的是,我的輸出是這樣的:

evt.Log.ToString(): Application  evt.LogDisplayName: Application 
evt.Log.ToString(): HardwareEvents evt.LogDisplayName: Hardware Events 
evt.Log.ToString(): Security   evt.LogDisplayName: Security 

等等,這樣的。但爲什麼沒有安裝日誌?此外,當我嘗試運行此代碼:

var eventLog = new EventLog("Setup", computer); 
eventLog.Clear(); 
eventLog.Dispose(); 

我得到的日誌「設置」未在該計算機上存在的錯誤消息,即使它絕對不會。以上代碼適用於除安裝程序日誌以外的所有其他事件日誌。

如何訪問安裝程序事件日誌?

作爲參考,正在嘗試的.NET框架是4.0和4.5,目標計算機是Windows 7和2008 R2。

回答

3

EventLog類只處理管理事件日誌。設置事件日誌是一個操作日誌(你可以在事件查看器中看到這個),所以不能由這個類來處理。

要訪問SetUp事件日誌,必須使用System.Diagnostics.Eventing.Reader名稱空間中的類。您可以使用以下事件來遍歷事件:

EventLogQuery query = new EventLogQuery("SetUp", PathType.LogName); 
query.ReverseDirection = true; // this tells it to start with newest first 
EventLogReader reader = new EventLogReader(query); 

EventRecord eventRecord; 

while ((eventRecord = reader.ReadEvent()) != null) 
{ 
    // each eventRecord is an item from the event log 
} 

查看this MDSN文章以獲取更多詳細示例。

+0

你釘了它。謝謝。這正是我所需要的。 –