2011-10-02 6 views
6

ho la seguente proprietà:Valori Wix booleano proprietà non funzionano

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

Una casella di controllo nell'interfaccia utente legato a quella proprietà:

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

E un'azione personalizzata che fa qualcosa sulla base di il valore di questa proprietà

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

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

Se provo a passare il valore 0 per updatedb dalla riga di comando:

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

o

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

il valore della casella è selezionata comunque. Detto questo, lo 0 passato sembra essere rispettato e l'azione RunDbMigration non viene eseguita ...

Cosa sta succedendo qui? Perché questa scienza missilistica è così?

risposta

5

Come altri hanno detto , Le caselle di controllo non sono booleane in senso 1/0, sono booleane in senso nullo/non nullo.

di disinserire dalla riga di comando - si vorrebbe usare qualcosa di simile

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

Le probabilità sono che la vostra condizione è alla ricerca specifico per il valore di 1 prima di eseguire l'azione personalizzata, che è il motivo per cui il vostro isn CA essere gestito

+1

Bingo. Grazie. Passando in UPDATEDB = "" ha fatto il trucco. Ho capito perché la mia azione personalizzata non veniva eseguita, ma non perché la casella di controllo fosse ancora controllata. Ora capisco che tutto ciò che non è "" significa controllato. – Jeff

3

Le proprietà del programma di installazione sono impostate su un valore o non sono impostate. Internamente il valore è solo una stringa, quindi "0", "1", "true" e "false" sono gli stessi.

Un controllo casella di controllo viene controllato quando la sua proprietà è impostata su un valore (non importa quale) e deselezionata quando la sua proprietà è vuota.

Questa riga di comando imposta la proprietà e controlla la casella di controllo:

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

Questa riga di comando non imposta la proprietà, quindi la casella di controllo non sia selezionata:

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

/Ma il valore predefinito di UPDATEDB è 1 ... quindi se non lo passo nella riga di comando, la casella di controllo è comunque selezionata per impostazione predefinita ..... – Jeff