Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用WIX安装多个同名的不同文件?_Wix_Windows Installer - Fatal编程技术网

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

是否使用WIX安装多个同名的不同文件?,wix,windows-installer,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 这两个文件当前作为单独的文件

我有一个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的内容,它还会显示两个组件具有相同的源属性


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

而WIX有一个基于校验和的称为“智能cabbing”的概念

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

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

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

如果你真的不想要一个EXE引导程序的复杂性,并且只有一个文件可以部署到64位的ProgramFiles文件夹,那就是一个颠覆性的黑客攻击。我在过去的几年中观察到,MSI不够聪明,无法判断C:\Progra~1实际上是C:\Program文件,因此它不会试图帮助您

当我需要将文件部署到32位和64位MSBuild目录时,这种小型颠覆性攻击非常有用


没有关于它将来是否会起作用的承诺。。。Microsoft没有对其进行记录。

您可以将描述这两个文件的组件添加到您的问题中吗?每个文件元素的Id只需要是唯一的(当然还有来源:)。您不需要说服WiX。是Windows Installer。@PeterRitchie我也是这么想的,但是文件元素有不同的Id和源属性。最后还是把同一个文件安装到两个服务器上。嗯,你确定吗?有了WIX,我可以构建一个64位安装程序,并将单个组件标记为32位,这很好。只有当两个文件都包含同名文件时,才会出现此问题。