2012-11-19 32 views
3

我有一個在vs2010中創建的.MSI安裝程序項目。這個.MSI包含許多* .msm(合併模塊文件)。有沒有一種方法可以在安裝過程中根據不同的Windows平臺選擇特定的* .msm(例如:xp,win7,vista ..)?從msi msm中排除dll

例如,如果安裝此.MSI的目標平臺是winXP,則我的.MSI將知道要選擇什麼.msm,而不是在安裝期間選擇所有.msm。

順便說一句,有沒有辦法.MSI訪問駐留在.msm中的特定* .dll?再說一次,例如,如果.MSI項目包含.msm,並且.msm包含許多* .dll,那麼在安裝.MSI期間是否可以在.msm中選擇特定的* .dll?

我的主要目的是讓我的.MSI知道什麼.dll/ .msm在安裝我的.MSI期間在不同的Windows平臺下使用。

+0

[合併模塊](http://msdn.microsoft.com/En-US/Library/Windows/Desktop/673de3ff-e58c-4153-9c8d-c3baebba5eb1)用於提供共享的代碼,文件,資源,註冊表條目以及將應用程序設置爲單個複合文件的邏輯。尤其請參閱有關[使用可配置合併模塊](http://msdn.microsoft.com/en-us/Library/Windows/Desktop/aa372408(v = vs.85).aspx) –

+0

的文檔,謝謝Mark。 .MSI如何在安裝過程中選擇特定的* .msm? – user1835184

+0

合併模塊在安裝之前使用單獨的合併工具合併到基本包中。結果是一個包含附加信息的新軟件包。與下面的答案一樣,將合併備選方案建議爲一個大型軟件包的獨立功能,然後使軟件包能夠選擇要安裝的功能。 –

回答

0

您基本上需要的是將每個合併模塊分配給一個新功能併爲該功能設置安裝條件。我不認爲這是VS 2010的可能,但是有一些commercial setup authoring tools可以做到這一點。

0

合併模塊(.msm)在結構上與簡化的Windows安裝程序文件(.msi)類似。合併模塊不能單獨安裝,它必須合併到.msi文件中。最好的選擇是獲得免費分發的合併工具或購買獨立軟件供應商提供的合併工具之一。然後您可以使用Mergemod.dll提供的功能。 合併模塊的預期用途是爲開發人員提供一種標準方法,以將共享Windows Installer組件和設置邏輯提供給其應用程序。因此,合併通常由安裝包的作者在部署之前完成。在安裝應用程序時試圖確定並執行正確的合併似乎不是最好的方法。

您可以改爲爲每個目標平臺創建一個單獨的.msi。將合適的.dll合併到每個軟件包中。然後在安裝應用程序中包含邏輯以檢查用戶的系統,然後安裝正確的軟件包。

正如前面的回答所建議的那樣,您可以將所有.dll合併到您已創作的單個安裝包中,以便安裝某些功能和組件的條件爲Operating System Property Values

您可以考慮在您的包裝Using Transitive Components。傳遞組件的典型用途是在系統升級過程中準備要重新安裝的產品。安裝包的作者指定在系統升級期間需要換出的那些組件,因爲它們具有傳遞屬性。當用戶稍後升級系統時,必須重新安裝產品。重新安裝後,安裝程序會刪除早期的組件,並安裝後續組件,而無需安裝整個產品。如果您希望用戶升級他們的系統,這可能會很好地服務於您的方案。