簡體   English   中英

從msi中以msm排除dll

[英]exclude dll in msm from msi

我在vs2010中創建了一個.MSI安裝程序項目。 此.MSI包含許多* .msm(合並模塊文件)。 有沒有辦法在安裝過程中根據不同的Windows平台(例如:xp,win7,vista ..)選擇特定的* .msm?

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

BTW,有沒有辦法讓.MSI訪問位於.msm的特定* .dll? 同樣,例如,如果.MSI項目包含.msm且此.msm包含許多* .dll,是否有辦法在安裝此.MSI期間選擇.msm中的特定* .dll?

我的主要目的是讓我的.MSI知道在安裝我的.MSI時在不同的Windows平台下使用什么.dll / .msm。

您基本上需要的是將每個合並模塊分配給新功能並在該功能上設置安裝條件。 我不認為這對VS 2010來說是可行的,但是有一些商業設置創作工具可以做到這一點。

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

您可以為每個目標平台創建單獨的.msi。 將適當的.dll合並到每個包中。 然后在設置應用程序中包含邏輯以檢查用戶的系統,然后安裝正確的軟件包。

如前面的答案所示,您可以將所有.dll合並到一個您編寫的安裝包中,以便某些功能和組件的安裝以操作系統屬性值為條件。

您可以考慮在包中使用傳遞組件 傳遞組件的典型用途是准備產品以在系統升級期間重新安裝。 安裝包的作者將在系統升級期間需要換出的組件指定為具有傳遞屬性。 當用戶稍后升級系統時,必須重新安裝產品。 重新安裝后,安裝程序將刪除早期組件並安裝后續組件,而無需安裝整個產品。 如果您希望用戶升級他們的系統,這可能很適合您的場景。

暫無
暫無

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

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