【问题标题】:WIX Install files into both 32 and 64 bit program files foldersWIX 将文件安装到 32 位和 64 位程序文件夹中
【发布时间】:2016-09-29 20:55:16
【问题描述】:

我有一种特殊情况需要找到解决方法。我的 32 位应用程序有一个 wix 安装程序,但它依赖于一个办公文档文件,无论 32/64 位 Windows 版本如何,该文件都必须放在“程序文件”文件夹下的固定位置。请暂时接受它的位置无法更改,因为它保留了自 XP 时代以来一直存在的应用程序的向后兼容性。我需要将我的应用程序安装在“Program Files (x86)”文件夹中,并提供这个必须驻留在“Program Files”中的文件。如果可能的话,我不想将它们分成两个安装程序。任何人都知道任何可能的方法来完成这项工作?

【问题讨论】:

    标签: x86 wix windows-installer 64-bit program-files


    【解决方案1】:

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

    您可能必须包含两个复制相同文件的组件,其中一个组件安装到 64 位计算机上的“C:\Programs Files”中,另一个安装到“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>
    

    这应该将文件安装到“C:\Program Files”中,无论是 32 位还是 64 位机器。

    如果文件在 64 位和 32 位组件之间完全相同,您将收到 ICE 警告,但没关系,因为它们是互斥的。

    【讨论】:

      【解决方案2】:

      尝试从 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() 来临时禁用重定向。

      正如这里所说,如果您还没有看过它:

      https://blogs.msdn.microsoft.com/heaths/2008/01/15/different-packages-are-required-for-different-processor-architectures/

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

      【讨论】:

      • 如果我对安装程序严格为 64 位感到满意,但仍想在“程序文件”中安装一些文件,在“程序文件 (x86)”中安装一些文件,该怎么办?这也是不可能的吗?
      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 2014-08-19
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多