2011-07-28 44 views
5

此問題引用heat.exe的輸出。我正在爲MSI中的COM互操作註冊一些.NET程序集來嘗試做「正確的事情」。 Regasm.exe是錯誤的事情在WXS中,如何引用通過不同組件安裝的文件?

直接調用regasm.exe,這很容易和「主要」工作,顯然不是一個好主意,says Rob Mensching。 這博客文章解釋了爲什麼這不是一個好主意,並且還提供了一個非常簡單的解決方案。不幸的是,2004年的帖子提出了一個現在已被棄用或不被支持的wix特性。 解決方案描述就不再有效,我猜,但在博客文章中規定的問題仍然存在。

顯然「正確的」解決問題的方法是運行heat.exe再「修正」的目錄引用等等。這聽起來很簡單,而且我正在嘗試做。

好了,所以我試圖做正確的事。此外,我不希望GAC大會,這意味着我必須做的COM註冊與codebase說法。 heat.exe的輸出包括這樣的事情:

<RegistryKey Root="HKCR" Key="CLSID\{xxx-GUID-HERE-xxx-xxx}\InprocServer32\1.2.3.4" > 
     <RegistryValue Name="Class" Value="My.DotNet.Classname.Here" Type="string" /> 
     <RegistryValue Name="Assembly" Value="Strongname of .NET Assembly here" /> 
     <RegistryValue Name="RuntimeVersion" Value="v2.0.50727" Type="string" /> 
     <RegistryValue Name="CodeBase" Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]" Type="string" /> 
    </RegistryKey> 

第一個問題:究竟是什麼Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]"

在我看來,這fil4B562083D141F5A2F29E28A1BD09AF3E是由維克斯生成​​ID;該id屬於.wxs文件中的一個File元素,它指向包含指定.NET類的程序集(DLL)的路徑。現在,那裏的八足動物究竟是什麼?方括號?和file:///前綴?幫我理解這個語法。

我問的原因 - 我不想使用這個ID。我已經有一個文件ID,它反映了文件的實際含義,並不是這樣。

但是有問題的文件安裝在不同的組件中。當我嘗試引用該文件時,我收到了一堆這樣的錯誤消息:

C:\dev\project\ComRegistration.wxs(397): warning LGHT1076: ICE69: Mismatched component reference. 
    Entry 'reg9652ABFDD2B970C523070996FE7BB510' of the Registry table belongs to 
    component 'C.ComRegistration'. However, the formatted string in column 'Value' references 
    file 'MyAssembly.dll' which belongs to component 'C.Main'. Components are in the same 
    feature. [C:\dev\project\MyProject.wixproj] 

如何解決此問題?

我覺得我不想在此組件另一File元素,指的是同一文件系統文件。它已經安裝了一個不同的組件(相同的功能)。我如何參考它?

基本上我想要像FileRef的成分,但是,顯然不存在。

回答

5

[#fileId]被替換爲文件的路徑。 (一個完整列表,請參閱"Formatted" in the MSI SDK

您可以通過將註冊表值和文件在同一組件避免ICE69。 ICE69告訴你,沒有註冊就可以安裝該文件。 (假設的FileRef不能解決這個問題。)把它們放在一起,問題就不會發生,ICE69也不會抱怨。

+0

如果我可以問,一個人會去「把它們放在一起」嗎?我有同樣的問題:在我的主要wsx中,我正在配置需要編寫RegistryValue的安裝程序,並且必須引用存在於我生成的wsx文件中的文件Id。 – JDR

相關問題