2011-10-02 8 views
6

मैं निम्नलिखित संपत्ति है:Wix बूलियन संपत्ति मूल्यों काम मत करो

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

यूआई है कि संपत्ति के लिए बाध्य में एक चेकबॉक्स: के आधार पर

<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> 

अगर मैं कमांड लाइन से UPDATEDB के लिए 0 मान पारित करने के लिए प्रयास करें:

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

या

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

चेकबॉक्स का मूल्य वैसे भी चेक किया गया है। उस ने कहा, 0 पास में प्रतीत होता है और RunDb माइग्रेशन एक्शन नहीं चलाया जाता है ...

यहां क्या हो रहा है? इस तरह के रॉकेट विज्ञान क्यों है?

उत्तर

5

के रूप में दूसरों का उल्लेख किया है , चेकबॉक्स 1/0 भावना में बुलियन नहीं हैं, वे एक नल/शून्य-शून्य अर्थ में बूलियन हैं।

कमांड लाइन से सेट नहीं करने के लिए

- आप

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

संभावना की तरह कुछ का उपयोग करने के कि अपनी हालत अपने कस्टम क्रिया, यही वजह है कि अपने सीए प्रतिसाद नहीं है निष्पादित करने से पहले 1 के मूल्य के लिए विशेष रूप से लग रही है कर रहे हैं चाहते हो जाएगा दौड़ नहीं रहा है।

+1

बिंगो। धन्यवाद। UPDATEDB = "" में चल रहा है चाल चल रही है। मुझे समझ में आया कि मेरी कस्टम कार्रवाई क्यों नहीं चल रही थी, लेकिन क्यों चेकबॉक्स अभी भी चेक किया गया था। अब मैं समझता हूं कि कुछ भी नहीं है जिसका मतलब चेक किया गया है। – Jeff

3

इंस्टॉलर गुण या तो किसी मान पर सेट हैं या वे सेट नहीं हैं। आंतरिक रूप से मान केवल एक स्ट्रिंग है, इसलिए "0", "1", "सत्य" और "झूठा" समान हैं।

एक चेकबॉक्स नियंत्रण चेक किया जाता है जब इसकी संपत्ति किसी मान पर सेट होती है (इससे कोई फर्क नहीं पड़ता) और उसकी संपत्ति खाली होने पर अनचेक की जाती है।

यह कमांड लाइन संपत्ति सेट करता है और चेकबॉक्स की जाँच करता है:

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

यह कमांड लाइन गुण सेट नहीं है, इसलिए चेकबॉक्स चेक नहीं किया जाता है:

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

/लेकिन UPDATEDB का डिफ़ॉल्ट मान 1 है ... इसलिए यदि मैं इसे कमांड लाइन में पास नहीं करता हूं, तो चेकबॉक्स को डिफ़ॉल्ट रूप से चेक किया जाता है ..... – Jeff

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^