2011-03-15 73 views
8

我想讀取遠程計算機上的事件日誌以檢查測試期間的錯誤。這裏有一些相關的代碼:使用.NET遠程讀取事件日誌

public bool CheckEventLogs(DateTime start) 
{ 
    EventLog myEventLog = new EventLog("CustomLog", "ServerName"); 
    bool errorFound = false; 
    foreach (EventLogEntry entry in myEventLog.Entries) 
    { 
    if (entry.EntryType == EventLogEntryType.Error && entry.TimeGenerated >= start) 
    { 
     Console.WriteLine("Error in Event Log:\n" + entry.Message + "\n"); 
     errorFound = true; 
    } 
    } 
    return errorFound; 
} 

目前,這段代碼拋出一個異常(試圖執行未經授權的操作)。根據MSDN,我需要EventLogPermission,但我一直在努力尋找如何使用此權限的任何示例。有沒有人有如何做到這一點的例子?

編輯:迴應評論

謝謝大家的評論 - 這裏是要求的補充資料:

唯一的例外是從foreach聲明拋出。具體來說,當單擊突出顯示in之後的單步執行代碼時。看起來我能夠創建事件日誌對象,但我無法訪問事件日誌中的條目。

我的帳戶沒有權限讀取目標系統上的事件日誌,但我擁有帳戶的憑據。當通過事件查看器手動連接時,可以選擇以另一個用戶身份進行連接。手動完成後,我的代碼運行沒有問題。但是,我無法在每次運行該程序時手動執行此操作。我需要的是一種以程序方式作爲另一用戶進行連接的方式。我認爲EventLogPermission將是這樣做的方式,但也許有另一種方式。如果有人知道如何在C#中以不同的用戶身份連接到遠程日誌,那就是我正在尋找的東西。

+1

哪一行引發異常? MSDN文章只說你需要寫權限 - 它沒有提到任何關於閱讀的內容。 – Gabe 2011-03-15 14:31:11

+1

您的用戶帳戶是否有權讀取遠程計算機上的事件日誌?打開事件查看器並嘗試從您的機器連接到遠程計算機進行檢查。 – 2011-03-15 14:56:15

+0

我只是嘗試你的代碼,並從遠程服務器獲取日誌。一切正常。 – Polaris 2011-03-15 14:59:19

回答

2

感謝所有提供此問題意見的人。一旦我意識到權限可能不是.NET的一部分,而是Windows和事件查看器本身的一部分,我對自己的調查有了一些新的方向。

它看起來像一個「網絡使用」命令是所有需要建立我的本地計算機和遠程計算機之間的連接。在使用我在問題中發佈的代碼之前調用「淨使用」時,事情效果很好。在從事件日誌中讀取之前,從代碼中調用該代碼非常簡單。

再次感謝您的幫助!

+0

你能發佈適合你的代碼嗎? – Praneeth 2012-09-07 15:07:10

+0

我認爲在我運行「net use」命令建立本地計算機和遠程計算機之間的連接後,我在問題中發佈的原始代碼已工作。 – Brian 2012-09-10 11:45:18

+0

你能告訴我們你是怎麼從你的代碼中使用'net use'的?我很難找到這個。 – snippetkid 2016-06-17 14:01:26

6

WMI是這個非常有用的,像

SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent 

的摘要將允許您查詢的日誌。來自MS的This utility將允許您探索WMI,甚至可以構建.net代碼來調用查詢。

這樣做的另一個好處是,它可以獲得所有事件並將它們帶到本地應用程序,以便在閒暇時分析它們。如果在處理過程中連接中斷(順便說一下,這與通常用於數據庫訪問的方法相同),那麼以現在的方式迭代事件很容易失敗。