2012-03-22 28 views
0

在工作中,我負責維護多個服務器上運行的多個Windows服務。不可避免的是,當部署後服務開始加載時,某些事情會變得混亂,並且某些dll或其他服務不存在,導致它立即終止。現在,我意識到這應該通過適當的構建和部署過程來解決,而不是現在的貧民窟方法。我們正在研究這個角度,但它仍然突出了我的知識缺口,這就是我在這裏問的原因。本質上,當這個服務加載失敗時,它沒有給出任何錯誤的跡象,包括在應用程序日誌文件(nlog)中。有沒有辦法在應用程序生命週期中足夠早地掛鉤到Windows服務應用程序中,以便捕獲這類事件並將其記錄到某處(或者其他一些已經記錄此事件的機制)以進行故障排除?C#在應用程序因DLLS缺失而無法加載時記錄

我問的原因是,由於業務限制,我經常在晚上部署一種。我很想擁有能夠快速告訴我如何搞砸的東西,而不是坐在那裏試圖弄清楚哪個dll丟失了,或者綁定了哪個綁定重定向。我想回家喝啤酒,而不是打護士給一個失敗的服務。任何人對我在哪裏可以烘烤這種東西有任何想法,以便我可以將上述啤酒發送給製造商?

+1

當然,不會不尊重貧民窟的人...... – Kiril 2012-03-22 20:02:53

+0

當然不是。人們可以聲明當前的代碼處理事物的方式非常簡單。這只是不在我想要的地方。 – 2012-03-28 15:00:47

回答

0

當Windows服務崩潰時,通常會在Windows事件日誌中寫入關於錯誤的一些信息。你可以在那裏查看。

否則,你應該將記錄掛鉤的AppDomain.UnhandledException事件捕獲任何unhanded例外。儘早做到這一點,你可能會記錄你的錯誤。

如果你知道錯誤是由於丟失或錯誤的DLL,您還可以趕上在AppDomain.AssemblyResolve事件這些錯誤。

0

我相信Windows事件日誌,特別是應用程序日誌,會告訴你什麼是缺少的。

3

您應該使用Fuslogvw.exe(也稱爲程序集綁定日誌查看器)。從MSDN

引用:

大會綁定日誌查看器顯示的信息進行組裝結合。 這些信息可幫助您診斷爲什麼.NET Framework不能在運行時找到程序集 。

1

雖然明顯沒有更換部署前正確的測試(即簡單地使用虛擬機上乾淨的操作系統圖像會顯示很多的問題)......

要檢測和解決「組裝失蹤」失敗啓用融合日誌並使用它,檢查博客文章Fuslogvw.exe and diagnosing .NET assembly binding issues。作爲權宜之計,您可以在所有服務器上保持啓用(我也建議不要這樣做)。

2

下載.NET開發人員SDK。其中你會發現fuslogvw.exe。這是Fusion輸出的查看器,Fusion是負責解析類型的組件。它會告訴你正在查找什麼程序集,掃描特定程序集的文件夾順序,嘗試從哪個文件夾加載以及爲什麼拒絕特定的dll。

相關問題