2014-10-30 148 views
0

我正在構建一個託管的DLL與MSI捆綁在一起,並附帶適當簽名的目錄。 MSI安裝失敗報告集的名稱,ProcessorArchitecture用於等具有詳細記錄運行MSIEXEC,下面所示:無法安裝從MSI安裝程序的託管的DLL程序集 - 錯誤1935 HRESULT = 0x800736FD

MSI (s) (64:DC) [14:31:33:754]: Assembly Error:An HRESULT could not be translated to a corresponding Win32 error code. MSI (s) (64:DC) [14:31:33:785]: Note: 1: 1935 2: {1ADE2A83-E905-4F35-9DD8-61F512CA50E8} 3: 0x800736FD 4: IAssemblyCacheItem 5: Commit 6: BLAHBLAH,version="10.0.62601.0",type="win32",processorArchitecture="x86",publicKeyToken="5f523ae7e6e1b389" MSI (s) (64:DC) [14:31:33:785]: Assembly Error (sxs): Please look into Component Based Servicing Log located at -207342408ndir\logs\cbs\cbs.log to get more diagnostic information. MSI (s) (64:DC) [14:31:33:785]: Note: 1: 2205 2: 3: Error MSI (s) (64:DC) [14:31:33:785]: Note: 1: 2228 2: 3: Error 4: SELECT Message FROM Error WHERE Error = 1935 MSI (c) (7C:1C) [14:31:33:785]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg Error 1935. An error occurred during the installation of assembly 'BLAHBLAH,version="10.0.62601.0",type="win32",processorArchitecture="x86",publicKeyToken="5f523ae7e6e1b389"'. Please refer to Help and Support for more information. HRESULT: 0x800736FD. assembly interface: IAssemblyCacheItem, function: Commit, component: {1ADE2A83-E905-4F35-9DD8-61F512CA50E8} MSI (s) (64:DC) [14:31:48:019]: Note: 1: 2205 2: 3: Error MSI (s) (64:DC) [14:31:48:019]: Note: 1: 2228 2: 3: Error 4: SELECT Message FROM Error WHERE Error = 1709 MSI (s) (64:DC) [14:31:48:019]: Product: BLAHBLAH v10.0.62601.0 -- Error 1935. An error occurred during the installation of assembly 'BLAHBLAH,version="10.0.62601.0",type="win32",processorArchitecture="x86",publicKeyToken="5f523ae7e6e1b389"'. Please refer to Help and Support for more information. HRESULT: 0x800736FD. assembly interface: IAssemblyCacheItem, function: Commit, component: {1ADE2A83-E905-4F35-9DD8-61F512CA50E8} Action ended 14:31:48: InstallFinalize. Return value 3.

在的Windows /日誌/ cbs.log中來看,我可以看到:

2014-10-30 14:31:33, Info CSI 0000000c Performing 1 operations; 1 are not lock/unlock and follow: Install (5): flags: 0 tlc: [BLAHBLAH, Version = 10.0.62601.0, pA = PROCESSOR_ARCHITECTURE_INTEL (0), Culture neutral, VersionScope neutral, PublicKeyToken = {l:8 b:5f523ae7e6e1b389}, Type = [l:10{5}]"win32", TypeName neutral, PublicKey neutral]) ref: (flgs: 00000000 guid: {27dec61e-b43c-4ac8-88db-e209a8242d90} name: [l:0]"" ncdata: [l:62{31}]"C:\Windows\system32\msiexec.exe") thumbprint: [l:128{64}]"c303b9f117203669bdfdbf904a7f1d45e4767da45615a08eff196fb02d093399" 2014-10-30 14:31:33, Error CSI [email protected]/10/30:14:31:33.488 (F) d:\win7sp1_gdr\base\wcp\library\catalog.cpp(263): Error c000038a [Error,Facility=(system),Code=906 (0x038a)] originated in function CCatalog::VerifyCertChainRoot expression: HRESULT_FROM_WIN32((dwError)) [gle=0x80004005] 2014-10-30 14:31:33, Error CSI 0000000e (F) c000038a [Error,Facility=(system),Code=906 (0x038a)] #1131# from CCSDirectTransaction::OperateEnding at index 0 of 1 operations, disposition 0[gle=0xd000038a] 2014-10-30 14:31:33, Error CSI 0000000f (F) 80090352 [Error,Facility=(0009),Code=850 (0x0352)] #1001# from Windows::COM::CComponentStore::InternalTransact(...)[gle=0x80090352] 2014-10-30 14:31:33, Error SXS Transact2 failed with 0x80090352

我見過很多報告,說HRESULT 0x800736FD是一個內部錯誤,並建議運行Windows系統更新準備工具。我已經這樣做了,但它沒有什麼不同。

這裏有一個人的報告遇到同樣的問題,但沒有響應:

https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/5938da72-16a4-46ef-9151-986b4bd6a60b/need-help-in-installing-dll-into-winsxs

我不認爲這有什麼不對的託管的DLL,因爲我可以手動將它安裝到GAC使用GACUTIL 。

這讓我焦躁不安。

+0

您的安裝程序是否升級? – 2014-11-03 22:25:44

+0

是的,都升高了。事實證明,今天早上我已經解決了我的問題。遵循的解決方案。 – Wartortle 2014-11-04 14:48:14

回答

0

好吧,經過反覆試驗後,我終於找到了問題。

我的MSI實際上是4個合併模塊 - 需要在WinSxS中安裝的非託管C++ DLL,相應的VS2005運行時(不要問)以及需要在GAC中安裝的託管C++包裝器。

其中一個合併模塊(託管的C++包裝器)與主MSI具有相同的名稱,所以當報告錯誤消息時,我(天真地)認爲這是錯誤的模塊。當然,錯誤信息有點不分青紅皁白 - 它實際上是失敗的非託管C++ DLL(具有不同的名稱)。

失敗的原因非常微不足道 - DLL清單中引用的公鑰標記是錯誤的。我錯誤地將用於託管C++ DLL的強名鍵的公鑰標記放在那裏,而不是代碼簽名證書的公鑰標記。

很遺憾地說這是一個小學生的錯誤,雖然我幾乎不是一個小學生。

令人煩惱的是,錯誤很明顯是安裝程序工具可以更明智地報告的東西。

因此,如果您閱讀本文並節省大量時間,我很高興。唉,對我來說,我失去了我一生中無法回頭的日子。

WinSxS,GAC,assembly,manifest,yada,yada,yada。這一切似乎都是如此,對我來說太複雜和脆弱。有人在某個地方笑得很好。

0

我沒有什麼,但第三方合併模塊的問題,尤其是你所說的。通常最好重構並創建一個setup.exe引導程序/ chainer來處理將它們作爲獨立的前提條件來安裝。這樣,當MSI安裝並且無論如何都不連接到MSI時,它們就已經存在。

+0

是的,我看到很多建議,說明類似。事實是,這曾經工作得很好,我們是通過升級代碼的一部分,所以我不明白爲什麼它不再工作。當然,其根本原因是對公鑰令牌的改變,但正如我所說,這應該以更有意義的方式進行報告。 – Wartortle 2014-11-05 16:09:02

+0

安裝人員的戰爭藝術正在讓它在儘可能多的機器上工作。 99%到99.99%有時意味着不使用通常看起來有效的東西,而是用強大的解決方案替代它們。 – 2014-11-05 16:11:06