使用WIX安装多个具有相同名称的不同文件?

时间:2017-01-20 16:31:09

标签: wix windows-installer

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

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

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

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

使用相应的32位和64位版本的MyLib.dll。

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

有没有办法说服WIX独立存储这两个文件,并确保每个文件都安装在正确的目录中?

1 个答案:

答案 0 :(得分:0)

虽然WiX确实有一个基于校验和的“智能出租车”概念。

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

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

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

如果您真的不想要EXE引导程序的复杂性并且只有1个文件要部署到64位程序文件文件夹,那么就会出现颠覆性攻击。我在过去的几年里观察到MSI不够智能,无法弄清楚C:\ Progra~1实际上是C:\ Program Files,因此它不会试图帮助你。

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

没有承诺将来是否有效......微软没有记录。