Windows服務安裝后自動停止


1,現象
我做了一個windows服務,為了以后部署方便,將其中容易發生變動的流程,做成了一個DLL插件A,然后在windows服務啟動的時候啟動加載。編程環境是在Windows2003服務器系統上,然后部署的系統是Windows 2008 R2。我的服務啟動5秒鍾后就自動停止了,並且try...catch不到任何異常。

2,資料,以下來自微軟技術資源庫 http://technet.microsoft.com/zh-cn/library/k7137bfe

關於異常的疑難解答:System.BadImageFormatException

,當 DLL 或可執行程序的文件映像無效時, BadImageFormatException 引發異常。

如果您的應用程序使用了 32 位組件,請確保該應用程序始終采用 32 位應用程序的運行方式。

如果應用程序項目的“平台目標”屬性設置為 AnyCPU,則編譯后的應用程序在 64 位或 32 位模式中均可運行。 如果采用 64 位應用程序運行方式,則實時 (JIT) 編譯器便會生成 64 位本機代碼。 如果應用程序依賴於某個 32 位托管組件或非托管組件,則在 64 位模式中無法加載該組件。 若要糾正此問題,請將項目的“平台目標”屬性設置為 x86,然后重新編譯。

確保未使用利用其他 .NET Framework 版本創建的組件。

如果使用 .NET Framework 1.0 或 .NET Framework 1.1 開發的應用程序或組件嘗試加載使用 .NET Framework 2.0 SP1 或更高版本開發的程序集,或者使用 .NET Framework 2.0 SP1 或 .NET Framework 3.5 開發的應用程序嘗試加載使用 .NET Framework 4 開發的程序集,便會引發此異常。BadImageFormatException 異常可能會報告作為編譯時錯誤,或在運行時可能會引發該異常。 有關示例,請參見 BadImageFormatException 類。

確保文件映像是有效的托管程序集或模塊。

當非托管動態鏈接庫或可執行文件傳遞給 Load 方法進行加載時會引發此異常。

有關更多信息,Visual Basic 用戶可以參見互操作性疑難解答 (Visual Basic)

 

3,解答
由於插件A應用程序項目的“目標平台”屬性設置為 AnyCPU,在x64位模式中無法加載該組件,所以我將插件A應用程序項目的“目標平台”設置為“x86”,然后停止服務,將重新生成的插件A放到服務安裝目錄下,重新啟動程序,OK!

這里改正一下,剛才我在上面寫的是X64,日志里記錄“試圖加載格式不正確的程序”!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM