wix - फेलिंग कंडीशन विक्स



windows-installer (1)

मैं निम्नलिखित मामलों में इंस्टॉलेशन को छोड़ने का प्रयास कर रहा हूं:

  1. विंडोज ओएस प्रकार = डेस्कटॉप ओएस है
  2. अगर HKLM \ SYSTEM \ CurrentControlSet \ Services \ MyService MYKEY = myValue
  3. यदि REG HKLM \ SYSTEM \ CurrentControlSet \ Services \ MyService = DisplayName मौजूद है और HKLM \ SYSTEM \ CurrentControlSet \ Services \ MyService MYKEY मौजूद नहीं है

स्थापना के दौरान यह अच्छी तरह से चला गया, लेकिन स्थापना के समय मेरी सुविधा स्थापना से गायब है।

क्या मैं शर्त लगाने में कुछ गलत कर रहा हूँ?

<Property Id="MYKEY" Secure="yes">
        <RegistrySearch Id="MyKey"
                             Root="HKLM"
                             Key="SYSTEM\CurrentControlSet\Services\MyService"
                             Name="mykey"
                             Type="raw" />
    </Property>
    <Property Id="MYSERVICE" Secure="yes">
        <RegistrySearch Id="MYSERVICE"
                        Root="HKLM"
                             Key="SYSTEM\CurrentControlSet\Services\MyService"
                             Name="DisplayName"
                             Type="raw" />
    </Property>
<Feature Id="MyFeature" Level="" Display="" Title="" Description="" AllowAdvertise="no" ConfigurableDirectory="INSTALLDIR">
   <MergeRef Id="MyFeature" Primary="yes"/>
   <Condition Level="0">((MsiNTProductType=1) OR 
   (MYKEY="MyValue") OR 
   (MYSERVICE="MyService" AND MYKEY=""))</Condition>
   </Condition>
</Feature>

नोट : मुझे कल ठीक से नीचे उपयोग की गई शर्तों को सत्यापित करने की आवश्यकता है, लेकिन मेरे पास ऐसा पोस्ट है जो आपको इंतजार किए बिना देख सकता है।

जब उन तीनों में से कोई एक "उप" -कॉन्डिशन सही है, तो आप क्या हासिल करना चाहते हैं?

  1. गर्भपात सेटअप : पूरे सेटअप को निरस्त करें? ( LaunchConditions )
  2. कॉन्फ़िगर सुविधाएँ : विशिष्ट सुविधा की स्थापना रोकें या सक्षम करें? ( सुविधा की स्थिति )

यह अंतर स्पष्ट रूप से महत्वपूर्ण है - और हमें उत्तर देने में सक्षम होना चाहिए। आपका वाईएक्स स्रोत स्निपेट वर्तमान में फीचर स्थितियों के रूप में उपयोग की जाने वाली शर्तों को दर्शाता है। मुझे लग रहा है कि यह वह नहीं है जो आप चाहते हैं।

LaunchConditions : यदि इन स्थितियों में से कोई एक सत्य है, तो पूरे सेटअप को निरस्त करने के लिए, आप LaunchCondition प्रविष्टियों का उपयोग करने का प्रयास कर सकते हैं। एक जटिल स्थिति बनाने के बजाय, आप उन्हें तीन अलग-अलग प्रविष्टियों में विभाजित कर सकते हैं जो कि प्रत्येक जाँच करें कि क्या सेटअप को रद्द कर दिया जाना चाहिए - प्रत्येक प्रविष्टि एक अलग और विशिष्ट कारण के लिए। मेरा सुझाव है कि आप अपने वाईएक्स स्रोत फ़ाइल में पैकेज तत्व के बाद इन लॉन्चकंडिशन प्रविष्टियाँ जोड़ें:

<Condition Message="Aborting setup: Server OS required for installation.">Installed OR MsiNTProductType=1</Condition>
<Condition Message="Aborting setup: State reason for abortion.">Installed OR MYKEY="MyValue"</Condition>
<Condition Message="Aborting setup: State reason for abortion.">Installed OR (MYSERVICE="MyService" AND MYKEY="")</Condition>

ये प्रविष्टियाँ इसे आपके संकलित MSI फ़ाइल के लॉन्चकंडिशन टेबल में बना देंगी

LaunchConditions को हमेशा सेटअप / चलाने में सक्षम होने के लिए सही का मूल्यांकन करना चाहिए।

तदनुसार, ऊपर की स्थितियों के Installed भाग यह सुनिश्चित करने के लिए हैं कि स्थापना के बाद स्थिति हमेशा सही हो - इसलिए आपको यह स्थिति नहीं मिलती है कि सेटअप स्वयं को अनइंस्टॉल या मरम्मत की अनुमति नहीं देगा क्योंकि लॉन्च स्थिति पूरी नहीं हुई है। शर्त: Installed - एक fresh install और major upgrades अलावा हमेशा सच होगा।

नोट : मुझे यकीन नहीं है कि लॉन्च की स्थितियां प्रशासनिक प्रतिष्ठानों के दौरान परेशानी पैदा कर सकती हैं। मुझे नहीं लगता कि वे ऐसा करते हैं (एक प्रशासनिक इंस्टालेशन में स्वयं के इंस्टॉलेशन सीक्वेंस हैं)। मैं कल परीक्षण और सत्यापन करूंगा। प्रशासनिक स्थापना चलाने पर किसी भी बॉक्स पर OR ACTION="ADMIN" को लॉन्च स्थिति को सही बनाना चाहिए।

फ़ीचर शर्तें : यदि आप सेटअप को निरस्त नहीं करना चाहते हैं, बल्कि इन स्थितियों का मूल्यांकन करने के आधार पर सुविधा की स्थापना स्थिति को नियंत्रित करना चाहते हैं, तो आपको लॉन्च की स्थिति अवधारणा के बजाय सुविधा शर्तों की अवधारणा का उपयोग करना होगा।

जब आप अपने WiX स्रोत में Feature level को 0 सेट करते हैं, तो फीचर सेटअप GUI में नहीं दिखाया जाता है और यह डिफ़ॉल्ट रूप से स्थापित नहीं होने वाला है । एक सुविधा की स्थिति इसे बदल सकती है और यह स्थापित करने के लिए सुविधा सेट कर सकती है यदि स्थिति सही का मूल्यांकन करती है।

आप दूसरे तरीके से भी जा सकते हैं और फ़ीचर लेवल को 1 के रूप में सेट कर सकते हैं (यह फीचर इंस्टॉल करना चाहिए) और फिर फ़ीचर कंडीशन का उपयोग करके इसके फ़ीचर लेवल को 0 पर सेट करें - यदि आप फीचर को इंस्टॉल नहीं करना चाहते हैं - जब शर्त सही है।

" क्विक मॉकअप " के तहत कुछ और विवरण यहां दिए गए हैं: आगंतुक यदि ... रजिस्ट्री का उपयोग करने की शर्त

नीचे दिए गए वाईएक्स स्निपेट में हम डिफ़ॉल्ट रूप से स्थापित करने के लिए एक विशेषता सेट करते हैं ( Level="1" ) और फिर हम फीचर को सेट करने के लिए सुविधा को सेट करने के लिए उपयोग करते हैं यदि इसकी संबंधित स्थिति सही का मूल्यांकन नहीं करती है (यह एक बहु-भाग स्थिति है) । इसलिए एक बार जब स्थिति सही हो जाती है तो हम फ़ीचर Level="0" असाइन करते हैं (जिसका अर्थ है कि फ़ीचर इंस्टॉल न करें और इसे सेटअप आईडीआई से छिपाएँ:

<Feature Id="MyFeature" Level="1"> <!--Default to install feature-->

  <Condition Level="0"> <!--Do not install feature if condition is true-->
    ((MsiNTProductType=1) OR (MYKEY="MyValue") OR (MYSERVICE="MyService" AND MYKEY="") AND (NOT ACTION="ADMIN"))
  </Condition>

</Feature>

AND (NOT ACTION="ADMIN") भाग को प्रशासनिक संस्थापन में संस्थापित करने के लिए बाध्य करना है। यह प्रभावी रूप से मूल्यांकन करने से अन्य स्थितियों को प्रभावी रूप से बंद कर देता है यदि सेटअप को प्रशासनिक इंस्टॉल मोड में चलाया जाता है - जिसके कारण व्यवस्थापक इंस्टॉल के दौरान सुविधा को स्थापित नहीं किया जाएगा। यह आखिरी भाग मुझे कल परीक्षण करना है।

अद्यतन : परीक्षण इंगित करता है कि Level=0 पर सेट की गई कोई भी सुविधा प्रशासनिक इंस्टॉल के दौरान बिल्कुल भी नहीं निकाली जाएगी, भले ही फीचर को स्थापित करने के लिए किसी भी सुविधा की स्थिति की परवाह किए बिना। मुझे लगता है कि अस्थायी निष्कर्ष Level=0 किसी भी सुविधा को सेट नहीं करना है, लेकिन Level=1 सेट करें और फिर उन्हें एक विशेषता शर्त के साथ Level=0 सेट करें जो सत्य का मूल्यांकन करता है। इस तरह यह सुविधा एक नियमित इंस्टॉलेशन में छिपी हो सकती है, लेकिन सभी सुविधाएँ - संबंधित फ़ाइलों के साथ - एडमिन इंस्टॉलेशन के दौरान निकाली जाती हैं। स्थिति के लिए AND (NOT ACTION="ADMIN") भाग की आवश्यकता नहीं प्रतीत होती है। नमूने को ऊपर छोड़ना जैसा कि अभी के लिए है।

लिंक: