2010-04-03 145 views
3

我寫信,從我的Windows事件日誌窗體應用程序在Windows 7上運行,我在事件得到這個消息日誌Windows窗體事件日誌

從源應用程序事件ID X的說明無法找到。引發此事件的組件未安裝在本地計算機上或安裝已損壞。您可以在本地計算機上安裝或修復組件。

如果事件發生在另一臺計算機上,顯示信息必須與該事件一起保存。

以下信息包括與事件:

異常詳細信息

消息資源是存在的,但該消息沒有在字符串/消息表

我的記錄發現代碼是:

public void Log(Exception exc) 
{ 
    EventLog.WriteEntry(
     "Application", 
     exc.ToString(), 
     EventLogEntryType.Error, 
     100); 
} 

我在Windows窗體上的日誌記錄通常是給一個數據庫,但在這種情況下決定使用事件日誌。我通常在ASP.NET應用程序中使用事件日誌,但這些都在本地XP Pro上,而Windows Server 2003則在網絡上使用。

這是Windows 7的東西還是Windows窗體的東西,我應該怎麼做才能解決這個問題?謝謝。

+0

什麼是堆棧跟蹤和/或消息的來源? – 2010-04-03 01:16:25

+0

這是事件日誌中的消息 – blu 2010-04-03 01:17:28

回答

2

請參閱http://support.microsoft.com/kb/307024,具體來說,不要忘記創建您的事件源。

+2

另外,請注意創建事件源的進程有足夠的權限來執行此操作。 – 2010-04-03 01:28:56

+0

+1關於創建事件源的評論。這是缺少的地方。 – 2010-04-03 01:29:17

+0

是的,不知道我是如何錯過的。現在與UAC進行史詩般的鬥爭。 – blu 2010-04-03 01:54:12

0

此重載中的第一個參數是「應用程序在指定計算機上註冊的源。」 documented here 如果這個來源是,就像你的情況,「應用程序」,你會得到這種行爲。 (難道說你mistakingly認爲第一個參數是指Windows的日誌:應用程序,安全等)

要註冊您的源做到這一點:

public void Log(Exception exc){ 
    if(!EventLog.SourceExists("MySource")) 
    { 
     EventLog.CreateEventSource("MySource", "MyNewLog"); 
     return ; 
    } 
    EventLog.WriteEntry(
    "MySource", 
    exc.ToString(), 
    EventLogEntryType.Error, 
    100); } 
0

此溶液爲我工作:

在Windows 7或Win 2008 R2的註冊表中,此項下有一個關鍵HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog,它們都是該事件日誌的已註冊有效源。

當您嘗試使用無效的源(不是HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog下的項)寫入事件日誌時,它列舉其他事件日誌鍵以查看如果有源存在。

我在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog項下添加了所有缺少的源代碼。 只需在此項下創建現有密鑰的副本,並將其重命名爲您的EventSource。