如何使用 WiX 从源代码重建完全相同的 msi 文件?

Posted

技术标签:

【中文标题】如何使用 WiX 从源代码重建完全相同的 msi 文件?【英文标题】:How to rebuild the exact same msi file from source with WiX? 【发布时间】:2013-07-25 15:32:13 【问题描述】:

从使用 WiX 制作的 msi 安装应用程序后:

如果我运行相同的 msi 文件,它将进入维护模式,我可以修复/卸载。

如果我在 WiX 源中运行从带有 Product Id="*" 的源重建的 msi,它将开始正常安装,并且不会检测到它是否已安装。如果我完成安装,它将在添加/删除程序中列为已安装 2 次(具有相同的版本号)。

1234563 /p>

如何从源代码控制中构建完全相同的 msi?这样我就不必保留原始 msi 文件而只保留源?

【问题讨论】:

【参考方案1】:

您可以设置 以便您的 MSI 具有与每个构建相同的 PackageCode。

【讨论】:

@budreau 我认为您还需要更改ProductVersion。至少Wix 3.11.1 似乎是这样。请参阅thisSO 帖子。 我相信 OP 希望从源代码重新构建 MSI 并具有相同的 MSI 输出。所以,他们不想改变任何事情......【参考方案2】:

通过设置产品 ID 和包裹 ID。 示例:

制造商="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)" Version="$(var.Version)" Language="1033">

问题说明: 如果产品 ID 设置为“*”,则产品 ID 将自动生成,并且在每次重建后,产品 ID 都设置为不同的 ID,这就是它第二次安装的原因。 如果相应的包 id 没有设置唯一的 guid,那么你会得到一个错误“该产品的另一个版本已经安装。...”

一旦您将 id 都设置为唯一 id,然后在每个重建的产品 id 和包 id 都设置为与以前版本的 msi 安装程序相同的 id 之后,当您要安装新的内置安装程序时,它会要求您修复/卸载。

【讨论】:

以上是关于如何使用 WiX 从源代码重建完全相同的 msi 文件?的主要内容,如果未能解决你的问题,请参考以下文章

WiX创建了msi文件,奇怪的主要升级行为

Jenkins 和 MSBuild 不会构建包含相同 dll 的多个版本的 WiX .msi

如何从包含多个 MSI 的 wix 自定义引导程序包中安装/卸载单个 msi,例如安装项目的添加/删除功能?

Wix 安装程序包产生损坏的“msi”

如何使用 WiX 和 MSI 进行静默安装和卸载?

WiX - 将参数从 MSI 传递到 Xeam 引导程序应用程序