2011-06-29 16 views
7

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

असल में, मैंने एक मौजूदा उत्पाद में एक प्लग बनाया है, और मैं यह जांचना चाहता हूं कि मेरा प्लग इंस्टॉल करने से पहले उत्पाद इंस्टॉल हो। मुझे लगता है कि मुख्य निष्पादन योग्य जांचने का सबसे आसान तरीका सही निर्देशिका में है।

मेरे प्रासंगिक कोड अब तक:

<Property Id="FILEEXISTS"> 
    <DirectorySearch Id="CheckFileDir" Path="INSTALLDIR" Depth="0"> 
    <FileSearch Id="CheckFile" Name="main.exe" /> 
    </DirectorySearch> 
</Property> 

<Condition Message="File does exist.">NOT FILEEXISTS</Condition> 

कहाँ INSTALLDIR निर्देशिका जहां main.exe होना चाहिए और नेस्टेड Directory टैग में परिभाषित किया गया है की Id है।

उत्तर

5

उपयोगकर्ता एमएसआई संवाद के माध्यम से एक इंस्टॉलेशन फ़ोल्डर सेट करने से पहले निष्पादित किए जाते हैं। तो यह दृष्टिकोण आपके इच्छित तरीके से काम नहीं करेगा।

यदि आप स्थापना फ़ोल्डर में किसी फ़ाइल की जांच करना चाहते हैं, तो मैं DoAction नियंत्रण ईवेंट के माध्यम से निष्पादित एक UI कस्टम कार्रवाई का सुझाव देता हूं। यह ईवेंट आपके फ़ोल्डर चयन संवाद पर अगला बटन द्वारा ट्रिगर किया जा सकता है।

इसके लिए कोई पूर्वनिर्धारित कस्टम क्रियाएं नहीं हैं, इसलिए आपको कस्टम कोड के साथ एक लिखना होगा। यह एक डीएलएल या वीबीस्क्रिप्ट होना चाहिए जो इंस्टॉलेशन हैंडल प्राप्त करता है। आप यहां एक छोटा सा ट्यूटोरियल पा सकते हैं: http://www.codeproject.com/KB/install/msicustomaction.aspx

+1

अच्छा बिंदु, कॉस्मीन! मुझे लगता है कि इस मामले में INSTALLDIR को रजिस्ट्री में स्वयं खोजा जाना चाहिए जहां मुख्य एप्लिकेशन स्थापना इसे ... –

+0

हां, रजिस्ट्री से पुराना इंस्टॉलेशन पथ पुनर्प्राप्त करना एक अच्छा विचार है। –

+0

हाय, इसके लिए धन्यवाद। मैं समझता हूं कि अब क्यों। अधिक पूर्ण समाधान के लिए पथ प्राप्त करने के लिए मैं एक रजिस्ट्री खोज में बदल जाऊंगा। इस बीच, मुझे @Path को "[ProgramFilesFolder] निर्माता/ProductFolder" और "FILEEXISTS" की बजाय "FILEEXISTS" की स्थिति को बदलकर इसे काम करने के लिए मिल गया है। – Chris

1

मुझे लगता है कि आप @Path में INSTALLDIR के आस-पास स्क्वायर ब्रैकेट [] को याद करते हैं। साथ ही, @ गहराई = 0 संदिग्ध लग रहा है, बस एक सादा खोज के लिए इस विशेषता को छोड़ दें, इसे 1 तक डिफ़ॉल्ट होना चाहिए और यही वह है जिसे आपको आमतौर पर निर्देशिका में फ़ाइल देखने की आवश्यकता होती है।

आशा है कि मदद करता है, लेकिन सख्त होने के लिए, आपके प्रश्न में वास्तविक प्रश्न नहीं है। यह समझना मुश्किल है कि आपको कोई त्रुटि मिल रही है या स्थिति केवल काम नहीं करती है ...

+0

क्षमा करें, यह शर्त काम नहीं करती है। चाहे फ़ाइल 'main.exe' है या नहीं, एप्लिकेशन अभी भी इंस्टॉल किए बिना इंस्टॉल करेगा। मैंने @ पैथ के साथ और बिना [] की कोशिश की है, और बस @ डेपथ को छोड़ने का प्रयास किया है, लेकिन इसका कोई फायदा नहीं हुआ है। क्या इससे कोई फर्क पड़ता है कि फ़ाइल अभी भी है, भले ही फ़ाइल नहीं है? चीयर्स – Chris

+0

मुझे यकीन नहीं है कि आपका क्या मतलब है, लेकिन FILEEXISTS प्रॉपर्टी केवल तभी सेट की जाएगी जब फ़ाइल उस फ़ोल्डर में पाई जाती है जिसमें आप इसे खोज रहे हैं। बीटीडब्लू, लॉग फ़ाइल की जांच करें कि यह समझने के लिए कि FILEEXISTS प्रॉपर्टी सेट हो गई है और क्या है मूल्य –

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