2012-05-16 36 views
2

我有一個應用程序的安裝程序,我在那裏使用一些定製。 在安裝時,我一直在使用一些自定義MSI屬性,如 DBHOST等來確定數據庫主機。如何在卸載時檢索MSI屬性的值?

而這個的默認值是localhost。

但我一直在安裝時通過命令行設置此DBHOST屬性與其他一些值(如192.168.1.3)。並且通過命令行設置的屬性安裝正常工作。

但是當我有在卸載時要執行的customation使用的

MsiGetProperty 

功能,我得到了默認值(本地主機),而不是說我已經通過命令行而安裝設置的值(192.168.1.3)

Can任何人都可以幫助我。爲什麼發生這種情況? 是否需要執行其他任何操作才能在卸載時爲MSI屬性獲取相同的值?

在此先感謝...

回答

5

的屬性值不具有持續性,這意味着在卸載它不會記得的最後一個值在安裝過程中它有,它會使用其默認的一個。最好和更簡單的解決方案是將此值寫入註冊表項,並在卸載期間使用註冊表搜索進行檢索。

+0

但是,我們使用我們在安裝時設置的自定義值,得到了一些屬性的確切值,例如INSTALLDIR? 它是以註冊表搜索的相同方式完成的嗎? – JijeshKV

+0

附加到安裝文件夾的屬性由Windows Installer存儲,因爲它們連接到包中的組件。對於像DBHOST這樣的獨立屬性,Windows Installer不提供緩存機制,在維護過程中使用安裝值的唯一方法是保存它,最簡單的位置是註冊表值,並且當包是再次啓動。 –

+0

有沒有什麼地方可以看到MSI引擎正在緩存什麼MSI屬性,以便我不浪費時間爲他們做自己的邏輯?如果InstallShield MSI屬性也存在類似的資源,那就太棒了,因爲我無法弄清楚IS_SQLSERVER是否被緩存。 –

0

由於您提到DBHOST,如果您使用InstallShield的本機SQL腳本功能,它們在其基礎架構中預先編寫了自定義操作,以便在修復,次要升級和卸載期間保留SQL連接所需的屬性以供後續使用。

默認屬性名稱是IS_SQLSERVER_SERVER。

順便說一句,DBHOST是非常無辜的,但實現一些持久數據(如IS_SQLSERVER_USERNAME和IS_SQLSERVER_PASSWORD)是敏感的,需要加密,解密。 InstallShield自動執行此操作。安全性是否足夠滿足您的需求取決於您的審查。

+0

在他們的文檔中有什麼地方可以看到哪些屬性installshield自身存在,哪些不存在? –