从 VS 安装程序转换后的 WiX 组件指南

Posted

技术标签:

【中文标题】从 VS 安装程序转换后的 WiX 组件指南【英文标题】:WiX Component Guid after converting from a VS installer 【发布时间】:2013-12-10 19:53:07 【问题描述】:

我正在为一个产品创建一个 WiX 安装程序,它将取代旧的 Visual Studio 安装程序,并将提供一个新的构建版本(从 1.0.5 升级到 1.0.6)。我了解我需要让安装程序计算产品的 GUID,并且我需要使产品的升级代码与之前的产品迭代相同。

我需要知道的是如何确定我的组件的 GUID。我找到了以下语句:

组件 GUID= - 这是应从上一代产品复制的产品/组件代码。如果这不可能或不可行,则必须告知客户他们应该在安装新版本之前卸载以前的版本。否则可能会在 PC 上哪个产品代码拥有哪个文件的问题上发生冲突。

我的意思是 Guid 将来自我包含在组件中的程序集的程序集信息。对吗?

谢谢!

【问题讨论】:

【参考方案1】:

不确定您从哪里获得该信息,但这并不完全正确。组件 GUID 与程序集信息完全无关。

组件 GUID 只是安装程序中每个资源的唯一标识符(它可以是文件、注册表项,甚至只是一批 sql 脚本)。如果您有 2 个以上的安装程序将并行安装并且可以共享一些文件,那么您可以对共享组件使用相同的 GUID。然后 Windows 安装程序将自动处理依赖项。用一个真实的例子可能会更容易:

ProductA 有 ComponentA、ComponentB 和 ComponentC ProductB 有 ComponentC、ComponentD 和 ComponentE

如果两者都安装了 ComponentC 仅在 GUID 相同时安装一次。如果未安装 InstallerB,则留下 ComponentC,因为 ProductA 仍然依赖于它,反之亦然,如果未安装 ProductA 而留下 ProductB。只有当两者都被移除时,ComponentC才会被移除。

如果在 ProductB 中更改 ComponentC(不更改 GUID),可能会出现复杂情况,这意味着它将与 ProductA 不兼容。如果发生这种情况并且升级了 ProductB,这将中断 ProductA 的安装。请参阅http://msdn.microsoft.com/en-us/library/aa372795(v=vs.85).aspx,了解有关组件规则和其他会破坏您的安装的场景的更多信息。

处理它们的最简单和最安全的方法是只使用“*”,因为 wix 会自动为该组件生成一个 guid。

【讨论】:

太好了,谢谢!我正在尝试通过一些教程来工作,但它们似乎都没有深入研究从不同类型的安装程序转换的主题。这是我从中获得该信息的网站,供参考:http://www.merlinia.com/mdt/WiXTutorial1.msl 要从以前的安装程序升级,即 vbdproj,您真正需要做的就是确保 UpdgradeCode guid 匹配,产品 guid 不同,版本号高于以前的版本并使用MajorUpgrade 元素 (wixtoolset.org/documentation/manual/v3/xsd/wix/…)。这样,它将完全卸载旧的 msi 并安装新的。

以上是关于从 VS 安装程序转换后的 WiX 组件指南的主要内容,如果未能解决你的问题,请参考以下文章

Wix 快速开发安装包程序 5分钟构建一个最轻量的安装包程序

WiX - 带有安装和卸载(或回滚)参数的多个自定义操作

WiX 刻录包安装程序 - 升级安装时未更新 ExePackage

带有动态 MsiPackage 名称的 WiX Bundle

在自定义对话框中自定义 Wix 安装程序中的图像

无法使用 WIX 安装程序注册 dll