gpt4 book ai didi

wix - MSI/WiX - 在多实例转换期间分配组件 GUID

转载 作者:行者123 更新时间:2023-12-04 14:15:37 26 4
gpt4 key购买 nike

使用 WiX 3.5,我有一个带有实例转换的 MSI,允许我在同一台机器上安装具有不同产品名称的软件。为此,我在 .wxs 文件中有条件定义的产品 ID 和名称的“硬编码”列表。但是,我只有一个 Feature-ComponentRef 定义,其中包括文件和非文件资源。

安装似乎工作正常,但卸载实例演示了这两个来源中提到的行为:

http://msdn.microsoft.com/en-us/library/aa367797(v=VS.85).aspx



http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Multiple-Instance-Transforms-Walkthrough-Proposed-Simple-Addition-to-WiX-to-Make-Them-Easier-td708828.html

具体来说,除了我的应用程序的最后一个实例之外,没有任何非文件资源(在这种情况下,注册表项)被卸载。 (即,如果我按以下顺序卸载:instance1、instance2 和 instance3 - 仅删除 instance3 的非文件资源。

我认为这与非文件组件没有唯一的 GUID 相关(而这不是文件组件的问题)

所以,我想知道一种有效的方法是否是定义一个具有一个产品 ID、名称和一组功能的单个 .wxs 文件,但是让自定义 bootstrap 为产品和非文件组件生成新的 GUID,然后将其插入在运行时进入 MSI 数据库?即,当需要卸载或更新时,我会查询已安装实例的注册表并检索它们的 GUID。

这将允许在运行时创建实例而不是提前在 .wxs 中硬编码,并且可以干净地卸载。

那有意义吗? Burn 会让一切变得更好吗? :)

最佳答案

从 v3.6.1511.0 版本开始,组件现在有一个“MultiInstance”属性。这允许根据 Josh Rowes 在他发布到 WiX 邮件列表的帖子中的建议为每个实例动态生成一个 guid(请参阅 OP 中的链接)。我已经测试过,这可以正常工作,导致在卸载当前实例时删除注册表数据,而不是卸载 LAST 实例时。

关于wix - MSI/WiX - 在多实例转换期间分配组件 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046712/

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