2013-07-29 41 views
8

我試圖訪問一個「ForwardedEvents」事件日誌的服務器上。添加事件日誌使用</p> <pre><code>el = new EventLog("ForwardedEvents", serverName); </code></pre> <p>這是行不通的註冊表

我相信它不工作,因爲日誌不包含在註冊表中Eventlog希望找到它的地方(HKLM/System/CurrentControlSet/Services/Eventlog/..)。

如何將日誌添加到註冊表中以便找到該日誌,或者是否有另一種方法來訪問未在該位置指定的日誌?

回答

9

通過爲日誌創建一個新的註冊表項來解決此問題: (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ LOGNAME)。

通過這篇..(在Windows Server 2008 R2上)..

1)右鍵點擊父文件夾(事件日誌) - >新建 - >關鍵

2)命名,如evtx關鍵在文件中(C:\ WINDOWS \ SYSTEM32 \ winevt \日誌\ LOGNAME)

3)在註冊表資源管理器的右窗格中,右鍵 - >新建 - >可擴充字符串值

4)命名新創建的REG_EXPAND_SZ「文件」

5)上的名稱 「文件」

6)右擊修改

7)在 「數值數據」 框中,添加路徑evtx文件中像

(%SYSTEMROOT%\ SYSTEM32 \ winevt \ Logs \ ForwardedEvents.evtx)

+1

此答案幫助了我,謝謝!它似乎沒有添加可擴展字符串值或編輯文件值的工作。我加了[這個答案](http://stackoverflow.com/questions/19803351/how-do-i-read-from-an-arbitrary-evxt-file-using-system-diagnostics-eventlog)詳細介紹了我如何解決它。 – dharmatech

2

如果您仍然希望以編程方式執行此操作,而不是通過註冊表手動創建日誌,則有一種方法。您需要檢查並確定EventSource是否先存在,如果不存在,則需要創建它。在嘗試使用該源創建EventLog實例之前,必須先發生這種情況。請注意創建和使用之間的延遲,因此請務必處理此問題(有關更多信息,請參見http://msdn.microsoft.com/en-us/library/2awhba7a(v=vs.110).aspx)。

// Create the source, if it does not already exist. 
if(!EventLog.SourceExists("MySource")) 
{ 
    //An event log source should not be created and immediately used. 
    //There is a latency time to enable the source, it should be created 
    //prior to executing the application that uses the source. 
    //Execute this sample a second time to use the new source. 
    EventLog.CreateEventSource("MySource", "MyNewLog"); 
    Console.WriteLine("CreatedEventSource"); 
    Console.WriteLine("Exiting, execute the application a second time to use the source."); 
    // The source is created. Exit the application to allow it to be registered. 
    return; 
} 

// Create an EventLog instance and assign its source. 
EventLog myLog = new EventLog(); 
myLog.Source = "MySource"; 

// Write an informational entry to the event log.  
myLog.WriteEntry("Writing to event log."); 
+0

您的代碼的一個小問題是,如果您使用OS> = Vista,除非您擁有管理員權限,否則SourceExists將以SecurityException失敗(正如我在將代碼從XP移植到W7時發現的那樣)。在這種情況下,您需要提供應用管理員權限或自己創建密鑰(例如手動或在例如.msi安裝期間) –

+0

如果以管理員身份運行應用程序,則不應該有任何問題。如果UAC位仍然適合,可以以管理員身份運行命令提示符,然後通過使用DOS導航到應用程序的路徑來運行包含此代碼的應用程序(即,如果您的應用程序被稱爲「myapp.exe」並在C:\ Temp中,然後:'C:> cd C:\ Temp',然後是'C:\ Temp> myapp.exe')。 – vapcguy

1

這接近這裏提供的其他註冊表的解決方案,但是這是我做到了在Windows 7上,並會寫入應用程序日誌,而不是轉發的事件日誌:

  • Windows徽標>鍵入搜索regedit,然後按Enter鍵

  • 展開HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog

  • 找到Application鍵併爲應用程序創建一個新的密鑰:MyApp

  • MyApp,在空白區域單擊鼠標右鍵的右側窗口中,選擇新建>可擴充字符串值。這將創建REG_EXPAND_SZ條目。給它起個名字EventMessageFile

  • 雙擊新條目設置一個值。對於該值,請輸入: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll 選擇確定

  • 僅將(Default)字符串值與其(value not set)值保持一致。

  • 重複兩次,將CurrentControlSet替換爲ControlSet001ControlSet002

如果你需要那麼你的應用程序遷移到另一臺計算機,您可以用鼠標右鍵單擊該鍵並選擇Export。您將該文件保存爲.reg文件,然後將其複製到下一臺計算機。在那裏,您雙擊運行它(以管理員身份登錄)。這樣,您不必手動重新創建它,對於其他應用程序,您可以在記事本中實際編輯.reg文件,只需更改應用程序的名稱並保存它(確保將格式更改爲「所有文件「,所以它保留.reg最後,並不保存爲.txt文件),然後您可以雙擊它運行並插入新應用程序的EventLog密鑰。

相關問題