2010-01-19 9 views
6

AFAIK इसे इस तरह किया जाता है:विक्स में कॉन्फ़िगर करने योग्य मर्ज मॉड्यूल का उपयोग कैसे करें?

उत्पाद:

<Merge Id ="HelpInstaller" SourceFile="HelpInstaller.msm" Language="1033" DiskId="1"> 
       <ConfigurationData Name="SurpressInstallation_Config" Value="&amp;HelpFeature"/> 
</Merge> 

मर्ज मॉड्यूल:

<Property Id="SupressInstallation" Value='0' /> 

<Substitution Table='CustomAction' Row='SetSupressInstallationProperty' Column='Target' Value='[=SupressInstallation_Config]'/> 
<CustomAction Id='SetSupressInstallationProperty' Property='SupressInstallation'  Value='[SupressInstallation]'/> 
<InstallExecuteSequence> 
    <Custom Action='SetSupressInstallationProperty' Before='RegisterHelp' /> 
    <Custom Action='RegisterHelp' After='CostFinalize'>(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE) AND SupressInstallation = 3) </Custom> 
</InstallExecuteSequence> 

लेकिन जब मैंने इसे ऊपर की तरह किया तो मुझे एक त्रुटि मिली: ने 'msmErrorDataRequestFailed' प्रकार की एक अप्रत्याशित विलय त्रुटि उत्पन्न की जिसके लिए वर्तमान में प्रदर्शित करने के लिए कोई त्रुटि संदेश नहीं है।

क्या कोई मुझे बता सकता है कि उस समस्या को हल करने के लिए कैसे? मैं मूल रूप से क्या करना चाहता हूं केवल मर्ज मॉड्यूल में एक कस्टम एक्शन निष्पादित करना है जब एक निश्चित सुविधा का चयन किया जाता है..क्या यह करने का सही तरीका है? धन्यवाद डैनियल

उत्तर

0

एक सुविधा में मर्ज मॉड्यूल पर निर्भरता है, न कि दूसरी तरफ। विलय मॉड्यूल में कुछ भी नहीं होना चाहिए, जो कि उत्पाद नाम, उत्पादकोड या फ़ीचर नाम जैसे मर्ज मॉड्यूल के बाहर किसी भी चीज़ का संदर्भ होना चाहिए क्योंकि इससे एक सामान्य उत्पाद में मर्ज मॉड्यूल को कसकर जोड़ दिया जाएगा, बल्कि एक सामान्य पुन: प्रयोज्य मॉड्यूल होगा। ऐसा करने से अनिवार्य रूप से एक परिपत्र संदर्भ तैयार होगा और यह विचार नहीं है।

आपको शायद जो चाहिए (अधिक जानकारी के बिना कहने में कठोर) आपकी स्थिति के लिए मर्ज मॉड्यूल में घटकों में से एक की क्रिया स्थिति का उपयोग करना है।

उदाहरण के लिए यदि component1 file1 है और आप customaction1 जरूरत आग जब इस घटक/फ़ाइल स्थापित किया जा रहा है तो आप की अभिव्यक्ति का उपयोग करेंगे:

$ component1 = 3 // INSTALLSTATE_LOCAL

इस तरह यदि यह विलय मॉड्यूल फ़ीचर नाम ए, बी या सी के साथ उत्पाद 1, उत्पाद 2 या उत्पाद 3 में विलय हो जाता है, तो इससे कोई फर्क नहीं पड़ता क्योंकि एसोसिएशन घटक स्तर पर है।

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

अब अगर आप इस सलाह को अनदेखा करना चाहते हैं, तो फ़ीचर एक्शन स्टेट ऑपरेटर और कसकर दोबारा दूर देखें।

Conditional Statement Syntax

1

यह एक बग की तरह लगता है। आपको कम से कम एक गलत वर्णनात्मक त्रुटि संदेश प्राप्त करना चाहिए जो बता रहा है कि क्या गलत हुआ। http://wixtoolset.org/bugs

5

पर बग के बारे में के लिए स्वतंत्र महसूस आपने मॉड्यूल के तहत विन्यास नोड को परिभाषित करने के लिए है:

<Property Id="SupressInstallation" Value='0' /> 
<Configuration Name="SupressInstallation_Config" Format="Text"/> 
<Substitution Table='CustomAction' Row='SetSupressInstallationProperty' Column='Target' Value='[=SupressInstallation_Config]'/> 
<CustomAction Id='SetSupressInstallationProperty' Property='SupressInstallation'  Value='[SupressInstallation]'/> 
<InstallExecuteSequence> 
    <Custom Action='SetSupressInstallationProperty' Before='RegisterHelp' /> 
    <Custom Action='RegisterHelp' After='CostFinalize'>(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE) AND SupressInstallation = 3) </Custom> 
</InstallExecuteSequence> 
संबंधित मुद्दे