我正在嘗試部署新的.net Com可見接口。安裝後,我的新的.dll可以被我的應用程序加載。有一個要求是轉換其中一個不工作的接口。部署和註冊Com Interop接口
我正在使用Heat來收穫我的wix xml。
"C:\Program Files (x86)\WiX Toolset v3.10\bin\heat.exe" file "MYComConnect.dll" /out "dll_fragment_12_2015.wxs"
"C:\Program Files (x86)\WiX Toolset v3.10\bin\heat.exe" file "MYComConnect.tlb" -scom /out "tlb_fragment_12_2015.wxs"
要知道這是不是編碼的問題,我的.dll我已經註冊了我的.dll和.TLB與regasm,一切工作正常。
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" "MYComConnect.dll" /tlb
我然後做的是什麼regasm添加註冊表比較,什麼我的WiX的安裝程序添加。
我注意到下列文件夾鍵被regasm添加,但不是由我威克斯添加安裝(對應值也由regasm添加,但我不會發布這一切)
HKLM\SOFTWARE\Classes\Interface\{6D8A24A9-9723-4934-9852-D8877BBBB9F6}
HKLM\SOFTWARE\Classes\Interface\{6D8A24A9-9723-4934-9852-D8877BBBB9F6}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Interface\{6D8A24A9-9723-4934-9852-D8877BBBB9F6}\TypeLib
HKLM\SOFTWARE\Classes\Interface\{721AE779-4A04-4FFE-B317-FE2355DE31FA}
HKLM\SOFTWARE\Classes\Interface\{721AE779-4A04-4FFE-B317-FE2355DE31FA}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Interface\{721AE779-4A04-4FFE-B317-FE2355DE31FA}\TypeLib
HKLM\SOFTWARE\Classes\Interface\{A001212B-8F67-42B6-BAA6-D61D6B34FC26}
HKLM\SOFTWARE\Classes\Interface\{A001212B-8F67-42B6-BAA6-D61D6B34FC26}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Interface\{A001212B-8F67-42B6-BAA6-D61D6B34FC26}\TypeLib
HKLM\SOFTWARE\Classes\Interface\{F293DBB5-471C-4D71-80CB-C3B30EBDFE10}
HKLM\SOFTWARE\Classes\Interface\{F293DBB5-471C-4D71-80CB-C3B30EBDFE10}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Interface\{F293DBB5-471C-4D71-80CB-C3B30EBDFE10}\TypeLib
看來,我的wix install只會在Wow6432Node中添加註冊表項。 Regasm爲兩者添加了鑰匙。
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{6D8A24A9-9723-4934-9852-D8877BBBB9F6}
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{6D8A24A9-9723-4934-9852-D8877BBBB9F6}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{6D8A24A9-9723-4934-9852-D8877BBBB9F6}\TypeLib
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{721AE779-4A04-4FFE-B317-FE2355DE31FA}
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{721AE779-4A04-4FFE-B317-FE2355DE31FA}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{721AE779-4A04-4FFE-B317-FE2355DE31FA}\TypeLib
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{A001212B-8F67-42B6-BAA6-D61D6B34FC26}
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{A001212B-8F67-42B6-BAA6-D61D6B34FC26}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{A001212B-8F67-42B6-BAA6-D61D6B34FC26}\TypeLib
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{F293DBB5-471C-4D71-80CB-C3B30EBDFE10}
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{F293DBB5-471C-4D71-80CB-C3B30EBDFE10}\ProxyStubClsid32
HKLM\SOFTWARE\Classes\Wow6432Node\Interface\{F293DBB5-471C-4D71-80CB-C3B30EBDFE10}\TypeLib
另一個區別我注意的是,熱已經爲每個類,而Regasm以下條目沒有它
HKLM\SOFTWARE\Classes\Wow6432Node\CLSID\{FB1D6314-4409-46E9-BD92-DDD99D110CDE}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}\: ""
我已閱讀,它並不重要,其中的接口被註冊爲他們然而,在比較什麼是regasm和熱量收穫之後,不要依賴bitness,但是如果接口沒有被添加到x64和x32註冊表中,那麼它不起作用。
從我的熱收穫的接口片段中看到的第一個RegistryValue元素如下所示。這將元素添加到Wow6432Node。
<Fragment>
<DirectoryRef Id="MYAPPCOMINTEROP">
<Component Id="Com_Interop_TLB" Guid="{F8F60B35-0270-4569-8F0F-9D09398C72D8}">
<File Id="fil460187E36ECD90A7A9A00591ADB1C5CB" Name="MYComConnect.tlb" KeyPath="yes" Source="..\..\MYComConnectReferencedDLL\MYComConnect.tlb" />
<RegistryValue Root="HKCR" Key="Interface\{6D8A24A9-9723-4934-9852-D8877BBBB9F6}" Value="_MYAppConnect" Type="string" Action="write" />
所以在沒有另一種解決方案我想跟進與註冊表項所做regasm中,我怎麼能做到這一點與我的維克斯XML。
編輯 - 進一步的信息
- 目標計算機是Win 7的64位與Office 2010的86
- 我的主要應用有目標CPU 86
- 的COM可見的.dll目標CPU值爲anycpu(該DLL由Office和我的應用程序使用)
- MSI是x64(因爲我已經有一個上下文菜單.dll需要將註冊表項寫入x64,以便Windows的x64資源管理器將讀取米
我希望這不會使事情變得複雜,但什麼我的COM可見DLL確實是allows me to call code in a VSTO addin.我不認爲這個代碼是必要的,因爲我可以從辦公室讓我的自定義對象和它沒有任何問題投給我的自定義界面,如果我使用regasm註冊我的.dll並創建tlb文件。
我實際上在我的開發PC上沒有註冊任何東西,並安裝了我的最終MSI。我的.dll工作,我可以投我的界面。我能從中得出什麼假設?我假設問題出在我的Com.dll上並構建它,因此我的問題與我的散熱收集和wix xml編碼無關。
更新2的問題 我獲得了第二臺PC上的Visual Studio上。我複製了我的Com .dll項目並構建它。我在這臺PC上用Tlbexp.exe創建了.tlb文件。然後我用MSI安裝了這個,我現在可以投射COM接口。
因此,我現在必須弄清楚爲什麼在一臺PC上構建它,而在另一臺上則不行。現在最主要的區別是,PC上運行的是Win 7,不能運行的是Win 10.