2011-10-02 53 views
6

我有以下特性:維克斯布爾屬性值不工作

<Property Id="UPDATEDB">1</Property> 

綁定到該屬性的UI一個複選框:

<Control Id="updateDatabase" Type="CheckBox" CheckBoxValue="1" Height="15" Width="95" X="20" Y="74" Text="Update Database" Property="UPDATEDB" /> 

和一個自定義操作,其執行一些基於此屬性的值

<CustomAction Id="RunDbMigration" Directory="INSTALLDIR" Return="check" 
      ExeCommand='[DBMIGRATIONDIR]\DbMigration.exe' /> 

<InstallExecuteSequence> 
    <Custom Action="RunDbMigration" After="InstallFinalize">UPDATEDB=1 AND NOT Installed</Custom> 
</InstallExecuteSequence> 

如果我嘗試從UPDATEB的命令行傳遞值爲0:

msiexec /i "Setup.msi" /l* UPDATEDB=0 

msiexec /i "Setup.msi" /l* UPDATEDB="0" 

複選框的值無論如何檢查。也就是說,傳入的0似乎受到尊重,並且RunDbMigration操作未運行...

這是怎麼回事?爲什麼這種火箭科學?

回答

5

正如其他人所說,複選框在1/0意義上不是布爾值,它們是空/非空值的布爾值。

要通過命令行取消設置 - 你想使用類似

msiexec /i "Setup.msi" /l* UPDATEDB="" 

有機會,你的條件是專門爲1的值執行自定義操作,這就是爲什麼你的CA ISN之前看不會跑。

+1

賓果。謝謝。傳入UPDATEDB =「」的技巧。我明白了爲什麼我的自定義操作沒有運行,但不是爲什麼複選框仍然被檢查。現在我明白,任何不是「」意味着檢查。 – Jeff

3

安裝程序屬性設置爲值或未設置。內部值只是一個字符串,所以「0」,「1」,「true」和「false」是相同的。

複選框控件的屬性設置爲某個值(無所謂),並在其屬性爲空時取消選中。

此命令行設置屬性,並檢查複選框:

msiexec /i "Setup.msi" /l* UPDATEDB="0" 

此命令行不設置屬性,因此該複選框未被選中:

msiexec /i "Setup.msi" /l* 
+0

/但UPDATEDB的默認值是1 ...所以如果我不通過它在命令行中,複選框默認情況下選中..... – Jeff