2009-06-03 9 views
7

में पथ से पिछला स्लैश निकालें मैं एक ऐसे सॉफ़्टवेयर के लिए प्लगइन स्थापित करने के लिए वाईएक्स का उपयोग कर रहा हूं जिसे मैं नियंत्रित नहीं कर रहा हूं। प्लगइन स्थापित करने के लिए, मैं एक रजिस्ट्री कुंजी में लक्ष्य फ़ोल्डर डाल करने के लिए है:वाईएक्स

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="LocalAppDataFolder"> 
    <Directory Id="APPROOTFOLDER" Name="Foobar Plugin" /> 
    </Directory> 
</Directory> 

... 

<DirectoryRef Id="APPROOTFOLDER"> 
    <Component Id="register" Guid="240C21CC-D53B-45A7-94BD-6833CF1568BE"> 
    <RegistryKey Root="HKCU" Key="Software\ACME\Plugins\FooBar"> 
     <RegistryValue Name="InstallDir" Value="[APPROOTFOLDER]" Type="string"/> 
    </RegistryKey> 
    </RegistryKey> 
</DirectoryRef> 

स्थापना के बाद, रजिस्ट्री कुंजी HKCU\Software\ACME\Plugins\FooBar\InstallDir स्थापना लक्ष्य पथ होते हैं, लेकिन एक अनुगामी "\" के साथ होगा। दुर्भाग्यवश, कुछ अजीब कारणों से, होस्ट एप्लिकेशन (प्लगइन आर्किटेक्चर प्रदान करता है) इसके कारण दुर्घटनाग्रस्त हो जाता है। अगर कोई पिछला स्लैश नहीं है, तो सब कुछ ठीक काम करता है!

क्या पिछला स्लैश से छुटकारा पाने के लिए WiX में कोई तरीका है?

एक समाधान मैं के बारे में सोच रहा था बस जहाँ तक मुझे पता, Windows इंस्टालर के रूप में एक "." पथ के अंत में, हालांकि, इस नहीं मेरी परिदृश्य :(में काम करने के लिए लगता है जोड़ रहा है ..

+1

जोड़ना एक '.' मेरी विशेष मामले में मदद की, तो मैं एक सीए के बिना द्वारा मिला धन्यवाद! –

उत्तर

2

तुम हमेशा कुछ इस तरह कर सकते हैं:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="LocalAppDataFolder"> 
    <Directory Id="APPROOTFOLDER" Name="Foobar Plugin" /> 
    </Directory> 
</Directory> 

... 

<DirectoryRef Id="APPROOTFOLDER"> 
    <Component Id="register" Guid="240C21CC-D53B-45A7-94BD-6833CF1568BE"> 
    <RegistryKey Root="HKCU" Key="Software\ACME\Plugins\FooBar"> 
     <RegistryValue Name="InstallDir" Value="[LocalAppDataFolder]\Foobar Plugin" Type="string"/> 
    </RegistryKey> 
    </RegistryKey> 
</DirectoryRef> 

और उपयोगकर्ता अंतिम फ़ोल्डर

+0

हाँ, यह सच है! चूंकि होस्टिंग एप्लिकेशन में डबल-स्लेश के साथ समस्याएं भी होती हैं, इसलिए मैं "फूबर प्लगइन" के सामने एक को हटा देता हूं और यह ठीक होना चाहिए .. धन्यवाद! – beef2k

1

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

1

केवल स्ट्रिंग परिवर्तन तुम सच में Windows इंस्टालर में स्वरूपित डेटा प्रकार के हेरफेर है। अधिक जानकारी के लिए MSDN देखें।

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

4

बदलने के लिए आप कस्टम कार्यों में स्क्रिप्ट नहीं का उपयोग करना चाहिए की अनुमति नहीं है, लेकिन अगर आप सीमित हो सकती है केवल कुछ ही लाइनों के लिए और इस उदाहरण के रूप में सरल कुछ करने के लिए नीचे, आप ठीक होना चाहिए ...

<CustomAction Id="VBScriptCommand" Script="vbscript"> 
    <![CDATA[   
    value = Session.Property("INSTALLFOLDER") 

    If Right(value, 1) = "\" Then 
     value = Left(value, Len(value) - 1) 
    End If 

    Session.Property("SOME_PROPERTY") = value  
    ]]> 
</CustomAction> 

<InstallExecuteSequence> 
    <Custom Action="VBScriptCommand" After="CostFinalize">NOT REMOVE</Custom> 
</InstallExecuteSequence> 
+0

अच्छा और सरल। मेरे बेकन बचाया। धन्यवाद! – Nikhil