使用 WiX 3.5,我有一个带有实例转换的 MSI,允许我将软件安装在具有不同产品名称的同一台机器上。为此,我在 .wxs 文件中有条件定义的产品 ID 和名称的“硬编码”列表。但是,我只有一个包含文件和非文件资源的 Feature-ComponentRef 定义。
安装似乎工作正常,但卸载实例演示了这两个来源中提到的行为:
http://msdn.microsoft.com/en-us/library/aa367797(v=VS.85).aspx
和
具体来说,在我的应用程序的最后一个实例中,没有任何非文件资源(在本例中为注册表项)被卸载。(即,如果我按以下顺序卸载:instance1、instance2 和instance3 - 仅删除instance3 的非文件资源。
我假设这与非文件组件没有唯一的 GUID 有关(而这不是文件组件的问题)
所以,我想知道是否一种有效的方法是定义一个具有一个产品 ID、名称和一组功能的单个 .wxs 文件,但是让一个自定义引导程序为产品和非文件组件生成新的 GUID,然后将其插入在运行时进入 MSI 数据库?即,当需要卸载或更新时,我会在注册表中查询已安装的实例并检索它们的 GUID。
这将允许在运行时创建实例,而不是预先在 .wxs 中硬编码,并且可以干净地卸载。
那有意义吗?Burn会让一切变得更好吗?:)