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