gpt4 book ai didi

com - 在 WXS 中,如何引用通过不同组件安装的文件?

转载 作者:行者123 更新时间:2023-12-02 05:11:50 26 4
gpt4 key购买 nike

这个问题涉及 heat.exe 的输出。我正在尝试在 MSI 中为 COM 互操作注册一些 .NET 程序集做“正确的事情”。 Regasm.exe 是错误

Calling regasm.exe directly, which is easy and works "mostly", is apparently not a good idea, says Rob Mensching. That blog post explains WHY it's not a good idea, and also offers a very simple solution. Unfortunately the post from 2004 suggests a wix feature that is now deprecated or not supported. The solution described there is no longer valid, I guess, but the problem laid out in that blog post remains .

Apparently the "correct" solution to the problem is to run heat.exe and then "fixup" the directory references and so on. That sounds simple enough, and is what I am trying to do.

好的,所以我正在尝试做正确的事情。另外,我不想对程序集进行 GAC,这意味着我必须使用 codebase 参数进行 COM 注册。 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是由Wix生成的Id;该 id 属于 .wxs 文件中的 File 元素,它指的是包含指定 .NET 类的程序集 (DLL) 的路径。现在,奥克索普到底是做什么用的?方括号呢?和 file:/// 前缀?帮助我理解这个语法。

我问的原因 - 我不想使用这个 ID。我已经有一个文件 ID,它反射(reflect)了文件的实际含义,但事实并非如此。

但是有问题的文件安装在不同的组件中。当我尝试引用该文件时,我收到一堆此类错误消息:

  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 这样的元素,但显然不存在。

最佳答案

[#fileId] 被文件路径替换。 (有关完整列表,请参阅 "Formatted" in the MSI SDK。)

您可以通过将注册表值和文件放在同一组件中来避免 ICE69。 ICE69 告诉您,该文件有可能在未注册的情况下被安装。 (假设的 FileRef 无法解决该问题。)将它们放在一起,问题就不会发生,ICE69 也不会提示。

关于com - 在 WXS 中,如何引用通过不同组件安装的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6864479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com