我有一个特殊情况,我需要找到解决方法。我的 32 位应用程序有一个 wix 安装程序,但它依赖于一个办公文档文件,无论 32/64 位 Windows 版本如何,该文件都必须放在“程序文件”文件夹下的固定位置。请暂时接受它的位置无法更改,因为它保留了自 XP 时代以来一直存在的应用程序的向后兼容性。我需要将我的应用程序安装在“Program Files (x86)”文件夹中,并提供必须驻留在“Program Files”中的此文件。如果可能的话,我不想将它们分成两个安装程序。任何人都知道任何可能的方法来完成这项工作?
2 回答
您应该能够在目录定义中包含“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>
这应该将文件安装到“C:\Program Files”中,无论它是 32 位还是 64 位机器。
如果 64 位和 32 位组件之间的文件完全相同,您将收到 ICE 警告,但没关系,因为它们是互斥的。
尝试从 32 位 MSI 安装安装到 64 位文件夹会导致重定向到 32 位位置,这会出现在带有此类条目的安装日志中:
WIN64DUALFOLDERS: 'C:\Program Files (x86)\' 将替换 'C:\Program Files\Wi...... 中的 17 个字符
属性更改:修改 TARGETDIR 属性。它的当前值为“C:\Program Files\Wilson\NewSetup”。它的新值:'C:\Program Files (x86)\Wilson\NewSetup\'。
32 位软件包只能包含 32 位组件,文档对此进行了明确说明。
如果有一个文件需要传送到 64 位 Program Files 位置,那么通常的解决方法是在应用程序中放置一些东西,在它第一次运行时将其复制到该位置。32 位应用程序可以通过调用 Wow64DisableWow64FsRedirection() 来临时禁用重定向。
正如这里所说,如果您还没有看到它:
一个 64 位应用程序(也可以包含 32 位组件)可以解决这个问题,我怀疑你已经知道了。