टीएल; डीआर: मुझे इसे बनाने के लिए इस सशर्त घटक में खाली<CreateFolder/>
तत्व क्यों चाहिए?मेरे वाईएक्स इंस्टॉलर को एक एक्सएमएल फ़ाइल को सशर्त रूप से अपडेट करने के लिए एक खाली CreateFolder की आवश्यकता क्यों है?
मैं एक इन-हाउस एप्लिकेशन के लिए एक साधारण वाईएक्स आधारित इंस्टॉलर डाल रहा हूं। इस इंस्टॉलर को मानक कॉन्फ़िगरेशन फ़ाइल (सामान्य .NET .config
फ़ाइल) को तैनात करने की आवश्यकता होती है और उसके बाद कमांड लाइन पर msiexec
पर गुणों का उपयोग करके इसे अनुकूलित करें।
अनुकूलन में से एक केवल एक विशिष्ट अनुप्रयोग सेटिंग बनाना है यदि RUNTIME संपत्ति को परिभाषित किया गया हो। यहाँ उस के लिए WiX घटक है:
<Component Id="C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime"
Guid="*">
<Condition>
<![CDATA[RUNTIME]]>
</Condition>
<CreateFolder/>
<util:XmlFile Id="X.Runtime.1"
Action="createElement"
ElementPath="/configuration/appSettings"
File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]"
Name="add"
Sequence="2"/>
<util:XmlFile Id="X.Runtime.2"
File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]"
ElementPath="/configuration/appSettings/add[\[]not(@key)[\]]"
Action="setValue"
Name="key"
Value="RunTime"
Sequence="3"/>
<util:XmlFile Id="X.Runtime.3"
File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]"
ElementPath="/configuration/appSettings/add[\[]@key='RunTime'[\]]"
Action="setValue"
Name="value"
Value="[RUNTIME]"
Sequence="4"/>
</Component>
यह काम करता है बस के रूप में मैं चाहता हूँ - अगर क्रम msiexec
के लिए कमांडलाइन पर निर्दिष्ट किया जाता है, नए तत्व बनाया जाता है; यदि नहीं, कुछ भी नहीं होता है।
मुझे इस घटक के भीतर खाली <CreateFolder/>
क्यों होना चाहिए?
जबकि मैं यह काम करने की कोशिश कर रहा था, मुझे "Wix Condition Statement" मिला, जो एक कार्य घटक दिखाता है, लेकिन यह नहीं बताता कि <CreateFolder/>
क्यों आवश्यक है।
<CreateFolder/>
निकाला जा रहा है मुझे इस त्रुटि देता है:
ICE18: KeyPath for Component: 'C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime' is Directory: 'INSTALLDIR'. The Directory/Component pair must be listed in the CreateFolders table.
है जो, मुझे यकीन है, काफी जानकारीपूर्ण एक बार आप जानते हैं कि इसका क्या मतलब है।
मैं इसका हिस्सा समझता हूं - घटक को एक महत्वपूर्ण पथ की आवश्यकता होती है, डिफ़ॉल्ट रूप से यह एक निर्देशिका प्राप्त करता है, और यह सुनिश्चित करने के लिए ' ' की आवश्यकता होती है। लेकिन यह कौन सी निर्देशिका है, और कहां? क्या यह सुरक्षित है? क्या यह इंस्टॉल के हिस्से के रूप में लक्ष्य मशीन पर कहीं खाली (मलबे) फ़ोल्डर्स बना रहा है? क्या ऐसा करने का कोई आसान तरीका है? –
Bevan
यह जो कुछ भी आप घटक को बता रहे हैं उसकी मूल निर्देशिका है। त्रुटि संदेश के आधार पर, यह इंस्टॉल किया गया है। –
@ बेवन: किसी रिक्त फ़ोल्डर में स्थापित करने के लिए सेट किए गए खाली घटक में एक कम बनाने वाली फोल्डर प्रविष्टि, जिसमें कोई अन्य फाइल नहीं है, एक विदेशी स्थिति को ट्रिगर करेगा जहां लॉन्च के बाद विंडोज इंस्टालर द्वारा फ़ोल्डर हटा दिया गया है (क्योंकि यह खाली है) तो विंडोज इंस्टालर एक विज्ञापित शॉर्टकट के माध्यम से इसे अगले लॉन्च पर दोबारा डालने का प्रयास करता है (यह एक कीपैथ चेक ट्रिगर करता है)। यह बकवास एक अंतहीन चक्र में दोहराता है। मैंने अभी परीक्षण करने के लिए सत्यापित किया है कि यह विंडोज इंस्टालर के बाद के संस्करणों में तय किया गया है, लेकिन मुझे अभी भी समस्या दिखाई दे रही है। एक CreateFolder प्रविष्टि इस विदेशी स्व-मरम्मत समस्या को रोकती है। –