वाईएक्स DirectorySearch
में यह निर्धारित करने के लिए उपयोग किया जा सकता है कि लक्ष्य कंप्यूटर पर कोई विशिष्ट निर्देशिका मौजूद है या नहीं। लेकिन मुझे समझ में नहीं आता कि यह निर्धारित करने के लिए एक सतत तरीका है कि निर्देशिका मौजूद नहीं है।इंस्टॉल समय पर किसी निर्देशिका की उपस्थिति का पता लगाना
उदाहरण के लिए:
<Property Id="INSTALLDIR" Secure="yes">
<RegistrySearch Id='InstallDir' Type='directory'
Root='HKLM' Key='Software\Company\Product\Install' Name='InstallPath'/>
</Property>
<Property Id='IS_INSTALLED' Secure='yes'>
<DirectorySearch Id='IsInstalled' Path='[INSTALLDIR]' />
</Property>
जब दोनों रजिस्ट्री कुंजी और निर्देशिका मौजूद, IS_INSTALLED
संपत्ति पथ DirectorySearch
द्वारा लौटाए को तैयार है।
जब निर्देशिका मौजूद नहीं है, IS_INSTALLED
"सी: \" पर सेट प्रतीत होता है।
है की तरह एक शर्त:
<Condition>NOT (IS_INSTALLED = "C:\")</Condition>
कि निर्देशिका मिला था पता लगाने के लिए एक विश्वसनीय तरीका है? क्या कोई बेहतर तरीका है?
उत्तर: यहाँ WiX mrnxs answer के आधार पर कोड है कि मैं
<Property Id="PRODUCT_IS_INSTALLED" Secure="yes">
<RegistrySearch Id='RegistrySearch1' Type='directory'
Root='HKLM' Key='Software\Company\Product\Version\Install' Name='Path'>
<DirectorySearch Id='DirectorySearch1' Path='[PRODUCT_IS_INSTALLED]'/>
</RegistrySearch>
</Property>
<CustomAction Id='SET_INSTALLDIR'
Property='INSTALLDIR'
Value='[PRODUCT_IS_INSTALLED]'/>
<InstallExecuteSequence>
<Custom Action='SET_INSTALLDIR' After='AppSearch'></Custom>
</InstallExecuteSequence>
हाय कॉस्मीन, विवरण के लिए धन्यवाद। मेरी समस्या यह है कि आपके कदमों में से एक अनिवार्य रूप से मुझे अपने प्रारंभिक प्रश्न के साथ छोड़ देता है। आप कहते हैं "... यदि आप कुछ खोज पाते हैं तो आप इसे IS_INSTALLED पर सेट कर सकते हैं"। ऐपशर्च हमेशा "कुछ" ढूंढता प्रतीत होता है भले ही यह ओएस ड्राइव की जड़ है। –
खोज संपत्ति केवल रूट ड्राइव पर सेट है यदि वह संपत्ति आपके एमएसआई में किसी फ़ोल्डर से जुड़ी है। यदि आप उस संगठन को हटाते हैं (उदाहरण के लिए फ़ोल्डर के लिए किसी अन्य प्रॉपर्टी का उपयोग करके), तो खोज संपत्ति खाली होनी चाहिए जब उसे कुछ भी नहीं मिलता है। असल में, आपकी खोज संपत्ति का उपयोग केवल खोज के द्वारा किया जाना चाहिए ताकि यह सुनिश्चित किया जा सके कि यह आपके इच्छित तरीके से निर्धारित है। –