X86 WIX将文件安装到32位和64位程序文件文件夹中

X86 WIX将文件安装到32位和64位程序文件文件夹中,x86,wix,windows-installer,64-bit,program-files,X86,Wix,Windows Installer,64 Bit,Program Files,我有一个特殊的情况,我需要找到一个解决办法。我的32位应用程序有一个wix安装程序,但它依赖于office文档文件,该文件必须放在“Program Files”文件夹下的固定位置,而不管32/64位windows版本如何。请暂时接受它的位置不能更改,因为它保留了XP时代以来应用程序的向后兼容性。我需要在“Program Files(x86)”文件夹中安装我的应用程序,并交付必须位于“Program Files”中的此文件。如果可能的话,我不想把它们分成两个安装程序。有人知道实现此功能的任何可能方

我有一个特殊的情况,我需要找到一个解决办法。我的32位应用程序有一个wix安装程序,但它依赖于office文档文件,该文件必须放在“Program Files”文件夹下的固定位置,而不管32/64位windows版本如何。请暂时接受它的位置不能更改,因为它保留了XP时代以来应用程序的向后兼容性。我需要在“Program Files(x86)”文件夹中安装我的应用程序,并交付必须位于“Program Files”中的此文件。如果可能的话,我不想把它们分成两个安装程序。有人知道实现此功能的任何可能方法吗?

您应该能够在目录定义中包含“ProgramFiles64Folder”,然后使用该目录作为需要进入64位位置的组件的目录

您可能需要包含两个复制相同文件的组件,其中一个组件安装到64位计算机上的“C:\Programs files”中,另一个组件安装到32位计算机上的“C:\Programs files”中

我对一些snmp相关文件执行类似操作。我的意思的一个例子:

<ComponentGroup Id="Files_32" Directory="OfficeProgramFilesFolder">
    <Component Id="SomeFile.dll_32" >
        <Condition>NOT VersionNT64</Condition>
        <File Id="SomeFile.dll_32" KeyPath="yes" Source="$(var.BinariesDir)\_bin\Win32\SomeFile.dll" />
    </Component>
</ComponentGroup>
<ComponentGroup Id="Files_64" Directory="OfficeProgramFiles64Folder">
    <Component Id="SomeFile.dll_64" Win64="yes">
        <Condition>VersionNT64</Condition>
        <File Id="SomeFile.dll_64" KeyPath="yes" Source="$(var.BinariesDir)\_bin\x64\SomeFile.dll" />
    </Component>
</ComponentGroup>

不是版本NT64
版本NT64
无论是32位还是64位计算机,都应将文件安装到“C:\Program Files”中


如果64位和32位组件之间的文件完全相同,但由于它们是互斥的,因此没有问题,您将收到ICE警告。

尝试从32位MSI安装安装到64位文件夹会导致重定向到32位位置,这会出现在安装日志中,其中包含以下条目:

WIN64DUALFOLDERS:“C:\Program Files(x86)\”将替换“C:\Program Files\Wi”中的17个字符

属性更改:修改TARGETDIR属性。其当前值为“C:\Program Files\Wilson\NewSetup”。它的新值:“C:\ProgramFiles(x86)\Wilson\NewSetup\”

32位软件包只能包含32位组件,文档对此非常明确

如果有一个文件需要传递到64位程序文件位置,那么通常的修复方法是在应用程序中安装一些东西,在第一次运行时将其复制到该位置。32位应用程序可以通过调用Wow64DisableWow64FsRedirection()临时禁用重定向

正如这里所说,如果你还没有看到它:


64位应用程序(也可以包含32位组件)可以解决这个问题,我想你已经知道了

那么,如果我满足于安装程序严格采用64位,但仍然希望在“程序文件”中安装一些文件,在“程序文件(x86)”中安装一些文件,该怎么办?这也是不可能的吗?