使用 WIX 安装多个同名的不同文件?

问题描述 投票:0回答:1

我有一个 WiX 安装程序,需要将文件安装到两个目录。在一个目录中,我们需要安装该文件的 32 位版本,在另一个目录中安装 64 位版本。

但是,这些文件具有相同的文件名,这似乎会导致 WiX 将它们合并在一起,并仅在 MSI 中存储单个副本。

基本上,我想要类似于以下的目录结构:

c:\Program Files\FooApp\MyLib.dll
c:\Program Files (x86)\BarApp\MyLib.dll

分别使用 32 位和 64 位版本的 MyLib.dll

这两个文件当前位于我们的 .wxs 文件中,作为具有单独 ID 的单独 File 元素,并存储为单独的组件。但是,当我运行安装程序时,它会将 64 位版本的文件安装到两个位置,如果我使用 Dark.exe 提取 MSI 的内容,它还会显示两个组件具有相同的 Source 属性。

有没有办法说服 WiX 独立存储这两个文件并确保它们都安装到正确的目录?

wix windows-installer
1个回答
0
投票

虽然 WiX 确实有一个称为“智能出租车”的概念,它是基于校验和完成的。

您所看到的行为是由于不同的原因造成的:

Windows Installer 不支持单个安装程序中的 32 位和 64 位组件。 MSI 数据库是特定于平台的,Windows Installer 将通过“帮助”您修复 C:\Program Files 引用以指向它认为您要作为 32 位 MSI 部署到的 32 位位置来对您不利。

“正确”的解决方案是创建一个 32 位 msi 和一个 64 位 msi,并使用 WiX Burn 等引导程序将它们捆绑在一起。

如果您确实不想要 EXE 引导程序的复杂性并且只有 1 个文件要部署到 64 位程序文件文件夹,那么有一个颠覆性的 hack。我在过去几年中观察到,MSI 不够聪明,无法弄清楚 C:\Progra~1 实际上是 C:\Program Files,因此它不会尝试帮助您。

当我需要将文件部署到 32 位和 64 位 MSBuild 目录时,这个颠覆性的小技巧非常有用。

没有承诺它将来是否有效...它没有被 Microsoft 记录。

© www.soinside.com 2019 - 2024. All rights reserved.