簡體   English   中英

WIX 將文件安裝到 32 位和 64 位程序文件文件夾中

[英]WIX Install files into both 32 and 64 bit program files folders

我有一個特殊情況,需要找到解決方法。 我的 32 位應用程序有一個 wix 安裝程序,但它依賴於辦公室文檔文件,無論 32/64 位 Windows 版本如何,該文件都必須放在“Program Files”文件夾下的固定位置。 請暫時接受它的位置無法更改,因為它保留了自 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>

無論是 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:\\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 位組件)可以解決這個問題,我懷疑你已經知道了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM