我使用InstallShield創建一個基本的MSI安裝2012Installshield的基本MSI:有條件地卸載組件
當卸載此設置中,我要檢查符合特定的條件,並根據這個條件我都保留或卸載某些組件的文件/文件夾/快捷方式。
現在我已經對這些組件設置了「永久=是」,並刪除了從自定義操作調用的託管程序集中的文件/文件夾/快捷方式。
有沒有更好的方法來做我想要的?
我使用InstallShield創建一個基本的MSI安裝2012Installshield的基本MSI:有條件地卸載組件
當卸載此設置中,我要檢查符合特定的條件,並根據這個條件我都保留或卸載某些組件的文件/文件夾/快捷方式。
現在我已經對這些組件設置了「永久=是」,並刪除了從自定義操作調用的託管程序集中的文件/文件夾/快捷方式。
有沒有更好的方法來做我想要的?
您應該考慮選擇或取消選擇特徵而不是組件。 Windows Installer模型獲取選定的功能,然後安裝這些功能所需的組件。
如果這些文件/文件夾/快捷方式的安裝是有條件的,那麼您應該將它們視爲屬於可選功能的組件。然後,您可以使用MsiSetInstallLevel爲安裝設置適當的安裝級別,以便根據條件確定或不安裝可選功能。功能級別在Feature table中指定,處理Condition Table可以修改功能的級別值。
一些這方面的文檔中解釋說:Working with Features and Components
永久是永遠的,所以標記爲永久成分沒有拆除。您可能可以將此與組件安裝的數據的有條件刪除結合起來,但這是一個混亂的命題。 –
@MichaelUrman現在我正在從c#dll中調用函數的自定義動作中刪除這些文件。但我硬編碼的DLL文件中,這是一件壞事。我沒有找到在運行時從自定義操作中設置「永久=否」或調用Msi ...-函數來刪除組件的所有文件的方法。 – haide