2012-10-24 69 views
1

我使用InstallShield創建一個基本的MSI安裝2012Installshield的基本MSI:有條件地卸載組件

當卸載此設置中,我要檢查符合特定的條件,並根據這個條件我都保留或卸載某些組件的文件/文件夾/快捷方式。

現在我已經對這些組件設置了「永久=是」,並刪除了從自定義操作調用的託管程序集中的文件/文件夾/快捷方式。

有沒有更好的方法來做我想要的?

+0

永久是永遠的,所以標記爲永久成分沒有拆除。您可能可以將此與組件安裝的數據的有條件刪除結合起來,但這是一個混亂的命題。 –

+0

@MichaelUrman現在我正在從c#dll中調用函數的自定義動作中刪除這些文件。但我硬編碼的DLL文件中,這是一件壞事。我沒有找到在運行時從自定義操作中設置「永久=否」或調用Msi ...-函數來刪除組件的所有文件的方法。 – haide

回答

0

您應該考慮選擇或取消選擇特徵而不是組件。 Windows Installer模型獲取選定的功能,然後安裝這些功能所需的組件。

如果這些文件/文件夾/快捷方式的安裝是有條件的,那麼您應該將它們視爲屬於可選功能的組件。然後,您可以使用MsiSetInstallLevel爲安裝設置適當的安裝級別,以便根據條件確定或不安裝可選功能。功能級別在Feature table中指定,處理Condition Table可以修改功能的級別值。

一些這方面的文檔中解釋說:Working with Features and Components

+0

感謝您的回答,但這些功能是_allways installed_和_conditionally uninstalled_。 – haide

+0

好的,但Windows安裝程序安裝是一個事務性過程,安裝和「卸載」以相同的方式運行。可以通過創建包來控制功能是否被添加或刪除。 - 關於 –

+0

我試圖將功能條件設置爲NOT(REMOVE =「ALL」),但是該功能仍然被卸載。因爲我是MSI的新手,我不知道這個嘗試是否完全錯誤。我試圖搜索谷歌,但我沒有找到解決方案(或使用錯誤的關鍵字)。 – haide