2015-02-09 213 views
0

我從我們的wxs文件中得到以下代碼片段。我需要了解爲什麼我們需要CustomAction SetInstallType通過CustomAction設置屬性

我認爲INSTALLATIONTYPE屬性將從Registrykey中設置。因爲它是一個公共屬性,我想我也可以在運行msiexec時從命令行傳遞它。 我從commandLine發送的值會覆蓋從註冊表獲得的值嗎?

<Property Id="INSTALLATIONTYPE"> 
    <RegistrySearch Id='InstallType' Root='HKLM' Key='SOFTWARE\MyProduct\PR\ROOT' 
    Name='Configuration' Type='raw'/> 
</Property> 
<CustomAction Id="SetInstallType" 
Property="INSTALLATIONTYPE" Value="[INSTALLATIONTYPE.DEFAULT]"/> 
<InstallExecuteSequence> 
...... 
    <Custom Action="SetInstallType" After="AppSearch">INSTALLATIONTYPE.DEFAULT 
    </Custom> 
    ..... 
</InstallExecuteSequence> 

我試圖從命令行傳遞的INSTALLATIONTYPE值喜歡INSTALLATIONTYPE=FULL但它被視爲一個新的屬性,而不是改變現有屬性的值。

回答

1

AppSearch Action將讀取註冊表值並將其分配(在進程中覆蓋)到您的屬性,而不管它具有什麼值。

訣竅是建立一個屬性的優先級的模式:

最多到最少重要:

1)數值拾取在UI(如果浮出水面)

2)傳遞的值在命令行(如果提供)

3)從註冊表檢索(如果存在的話)值

4)默認值

UI序列 AppSearch - 讀取註冊表來臨時變量 套裝屬性分配溫度到最終如果最終空(NOT PROPERTY) 設置屬性默認值到最終如果最終空(不是地產)

顯示在UI .. 。如果用戶更改值,最終屬性將更新

執行序列 支持靜默安裝的相同流程。

+0

單獨'RegistrySearch'是否足以搜索註冊表值並將其分配給屬性?如果我只有'RegistrySearch'是否提供了我在命令行提供的值覆蓋它的值? – 2015-02-10 04:54:21

+0

'RegistrySearch'是一個抽象,不存在。它將行寫入Appearch和Reglocator表中,然後由AppSearch操作進行處理。您在命令行傳遞的屬性是初始值,然後被AppSearch覆蓋。記錄安裝程序(msiexec/I foo.msi/l * v install.log),您將看到顯示此情況的部分。 – 2015-02-10 11:58:26

+0

好的。當我進行管理安裝時,我會在日誌中看到這些嗎? – 2015-02-10 13:22:36