2011-09-08 11 views
6

मैं यह जानना चाहता हूं कि GUI में उपयोगकर्ता द्वारा चुने गए कस्टम स्थापना स्थान में कोई निर्देशिका पहले से मौजूद है या नहीं। मैंने निम्नलिखित कोशिश की:विक्स: एक कस्टम स्थापना स्थान में निर्देशिका खोज कैसे करें

<Property Id="DIRECTORY_PATH"> 
    <DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" /> 
</Property> 

लेकिन यह काम नहीं करता है क्योंकि निर्देशिका खोज AppSearch के दौरान हो रही है। जबकि इंस्टालडिर को बाद में InstallDirDlg के दौरान सेट किया गया है। चूंकि INSTALLDIR ऐपशर्च के लिए समय पर सेट नहीं है, DIRECTORY_PATH गलत तरीके से "\ MyDirectory" पर सेट है।

जब ऐपशर्च इंस्टालयूइसेक्वेंस और इंस्टालएक्सक्यूट्यूक्वेंस के साथ होता है तो मैंने बदलने की कोशिश की, लेकिन यह केवल ऐपशर्च को लागत आरंभ करने से पहले आने देगा, बाद में नहीं।

तो मैं INSTALLDIR स्थान चयनित उपयोगकर्ता पर निर्देशिका खोज कैसे करूं?

उत्तर

3

यदि आपको केवल उस निर्देशिका को सत्यापित करने के लिए उपयोगकर्ता की पसंद का इंतजार करना है, तो DirectorySearch आपके लिए नौकरी नहीं करेगा। उदाहरण के लिए, InstallDirDlg के अगले क्लिक पर, उपयोगकर्ता को इंस्टॉल करने के बाद आपको "सेट प्रॉपर्टी" कस्टम एक्शन लिखना होगा।

अद्यतन।

  • उपयोगकर्ता अपने सेटअप की InstallDirDlg को प्राप्त होता है जब, वह/वह निर्देशिका, जो INSTALLDIR संपत्ति
  • संवाद InstallDirDlg तो एक कस्टम उत्प्रेरित करने चाहिए करने के लिए रखा जाता है का चयन करता है: तो, मैं मूल रूप से निम्नलिखित मतलब अगला बटन पर कार्रवाई
  • इस कस्टम क्रिया INSTALLDIR संपत्ति के मूल्य मिलना चाहिए, और एक साधारण फाइल सिस्टम जाँच INSTALLDIR शामिल है कि क्या MyDirectory
  • अगर यह होता है, DIRECTORY_PATH संपत्ति आवश्यक मान पर सेट है, जैसे session["DIRECTORY_PATH"] = session[INSTALLDIR] + "\MyDirectory";
  • अन्यथा, DIRECTORY_PATH सेट नहीं है (और आप NOT DIRECTORY_PATH की जाँच करके किसी भी हालत में इस तथ्य का उपयोग कर सकते हैं)

आशा है कि यह यह स्पष्ट कर देता है।

+0

उपयोगकर्ता की पसंद केवल स्थापना स्थान की पहचान करती है, न कि उस स्थान पर "MyDirectory" के लिए खोज रहे एक उप-निर्देशिका मौजूद है या नहीं। डायरेक्टरीशर्च के बिना, इंस्टॉलर को कैसे पता चलेगा कि उसे संपत्ति सेट करनी चाहिए? – Michael

+0

आपको निर्देशिका खोज स्वयं को अनुकरण करना होगा। जब तक वास्तविक निर्देशिका खोज AppSearch के दौरान होती है, यह आपकी आवश्यकताओं के अनुरूप नहीं है। यही कारण है कि मैंने "सेट प्रॉपर्टी" एक्शन को उद्धृत किया - इसे न केवल एक संपत्ति सेट करनी चाहिए, बल्कि यह पता लगाने के लिए कुछ तर्क दें कि उपनिर्देशिका मौजूद है या नहीं। –

+0

मैंने सोचा था कि उपर्युक्त टिप्पणी उलझन में लग रही है :) मैं अपना उत्तर अपडेट करूंगा –

0

आशा है कि यह आपकी मदद करेगा।

यदि आपने रजिस्ट्री में पिछली स्थापना के INSTALLDIR को संग्रहीत किया है, तो आप इसे प्राप्त कर सकते हैं और इसकी खोज कर सकते हैं। इंस्टॉल यूआई अनुक्रम में इंस्टॉलेशन स्थान पिछले स्थान पर इंगित करेगा।

<!-- Set previous install location, if available --> 
<Property Id="INSTALLDIR" Secure="yes"> 
    <RegistrySearch Id="InstallRootRegistry" 
        Type="raw" 
        Root="HKLM" 
        Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 
        Name="INSTALLDIR" /> 
</Property> 

<!-- The property WIXUI_INSTALLDIR must be set for the UI to know which directory to use as default --> 
<Property Id="WIXUI_INSTALLDIR" 
      Value="INSTALLDIR" Secure="yes"/>