3

是否有任何方法可以使用Visual Studio 2008創建Windows Installer以同時針對x86和x64操作系統。針對Windows Installer中的x86和x64(VS2008)

在TargetPlatform屬性中,我只是:x86x64,Itanium。我知道還有一個叫Any CPU的地方,但我找不到它。

此外,我不想創建兩個安裝程序。

任何想法?

謝謝。

回答

3

這是可以做到的,但不能直接在Visual Studio中的一般做法是這樣的:

  • 創建一個通用的MSI同時包含32位和64位資源
  • 創建MST transforms (一個用於32位,另一個用於64位),它們根據目標平臺修改MSI
  • 使用EXE引導程序動態檢測平臺和應用正確的轉換到您的MSI

您可以Orca創建變換。如果你想要一個商業解決方案,你可以嘗試高級安裝程序或InstallShield。

如果這看起來太複雜了,您可以簡單地使用單獨的32位和64位軟件包。

+1

+1,很好的答案。 – slugster

+0

不錯。謝謝... – Sunil

1

我可能是錯的,但我很確定這不能完成。 您提到的Any-CPU被.Net編譯器用於您的程序集(.Net程序集默認情況下是架構不可知的,但可以被強制編譯爲x86或x64)。 但是由於windows-Installer是一個原生的win32 exe,它不能被生成爲「Any-CPU」。 因此,您必須爲x86和x64生成2個相同的安裝程序。

+1

你是部分正確的 - MSI不是可執行文件*,它實際上是由'msiexec.exe'讀取並執行的排序數據庫。 (*如果「MSI」有'。exe'後綴它是一個引導程序包裝MSI,引導程序是編譯代碼,但可以在沒有任何問題的情況下在64位系統上運行)。 – slugster

3

它可以完成,但不能與VS安裝程序。我有一位使用InstallShield產品實現了這一點的同事,但讓我說這是一個絕對的黑客攻擊,最終他得到了一個更好的結果,使得兩個不同的安裝程序,每個目標位都有一個安裝程序。

我還需要開導你:

在上投放的財產,我剛:86,64,安騰。我知道,有另外一個地方叫任何CPU

TargetPlatform屬性不會更改您要安裝,你得到它夾雜了組件本身的目標平臺的應用程序的位數。 MSI是運載工具,其中的.Net程序集是有效載荷。 TargetPlatform MSI上的設置不管理.net程序集是如何編譯JIT的,而是用於幫助確定安裝路徑(如果它設置爲x86,那麼默認安裝路徑應爲%PROGRAMFILES(x86)%,並且不同的註冊表配置單元將爲。針對性