2012-11-29 40 views
7

我們的應用程序中存在一些非致命錯誤和應用程序恢復的情況。寫入應用程序事件源是否可以接受?

當將所述項目填充到選擇列表時,無法正確識別某些可導入項目的示例。這些錯誤不會導致應用程序崩潰,但會提醒用戶某些項目未能加載。

在這種情況下,該錯誤將作爲警告記錄到應用程序事件日誌中。這是應用程序從中恢復的非致命錯誤,但如果需要,記錄到事件日誌允許我們查看原始錯誤。

我們的問題是軟件需要能夠與高級用戶帳戶一起安裝。不是管理員帳戶,我們無法爲應用程序創建自定義事件源。

其目的是將錯誤寫入「應用程序」事件源(它已存在於應用程序事件日誌中)。但是,這樣做會導致類似於以下內容的文字也被包括在內。

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

這是因爲我們編寫它時EventID爲0。這種方法將完成工作,但是有沒有更好的方法?是否有一種非管理方式來指定應用程序事件源的EventID以表明它來自我們的應用程序?

回答

0

你作爲看到的錯誤找不到來自源應用程序的事件ID 0的說明。引發此事件的組件未安裝在本地計算機上或安裝已損壞。您可以在本地計算機上安裝或修復組件。是應用程序源的註冊事件消息文件沒有針對事件ID 0的條目的結果。您看到的消息是從事件消息文件獲取消息ID的模板並使用事件有效內容格式化它的結果。

我不會推薦一般來說,你劫持你不擁有的來源。誰在消費這些事件對於他們的意思和他們攜帶的信息有着特定的期望。

關於是否有一種非管理方式來指定應用程序事件源的EventID以表明它來自我們的應用程序?,你期望事件ID規範意味着什麼?來源什麼決定事件來自何處。

編輯:

您將獲得在事件查看器錯誤,無論您是否提供0以外的事件ID,因爲源沒有註冊的事件消息文件。即使這樣做,您也不得不使用在消息文件中包含條目的事件ID(混淆事件的使用者),或者使用沒有條目的事件ID並仍然會出錯。

+0

我已經做了一些閱讀:事件ID與事件源組合確定發生什麼樣的事件。 總之:我不介意警告錯誤,但我不應該使用我沒有創建的源。我無法創建一個(非管理員安裝等),所以我希望找到可用於這些事件的事件源,或者使用不同的機制進行日誌記錄。思考? – MoSlo

+0

如果您使用.NET 4.5,則可以使用EventSource類(http://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx)將事件寫入ETW,而無需註冊。缺點是事件不會保存在事件日誌中,所以如果你不積極地聽這些事件,你將不會得到它們。 – fsimonazzi

0

您可以通過應用程序事件ID作爲參數:(例如:234)

EventLog.WriteEntry("Application", "your log message here", EventLogEntryType.Warning, 234); 

進一步閱讀到EventLog.WriteEntry方法

http://msdn.microsoft.com/en-us/library/xzwc042w.aspx

+1

只是爲了完整起見,我還要編輯添加它*是*可以使用* Application *事件源這樣。 (當然,除非你不同意它是OK的!) –

+0

該示例中的「應用程序」是消息,而不是事件源。事件源是「dotNET示例應用程序」。 公共靜態無效WriteEntry( \t串源, \t字符串消息, \t EventLogEntryType類型, \t INT EVENTID ) – fsimonazzi

+0

這不回答這個問題。此外,這導致「來自源應用程序的事件ID 234描述無法找到..」 – user2864740

相關問題