2009-09-02 12 views
5

मैं उपयोगकर्ता को अपने एप्लिकेशन के कौन से घटकों को स्थापित करना चाहता हूं, इसका विकल्प देने के लिए WixUIFeatureTree का उपयोग कर रहा हूं ... मेरी सुविधाओं में से एक में इसके भीतर दो वैकल्पिक विशेषताएं हैं, जिनमें से कम से कम एक प्रोग्राम को काम करने के लिए स्थापित किया जाना चाहिए। मैं उपयोगकर्ता को किसी विशेष को स्थापित करने के लिए मजबूर नहीं करना चाहता हूं, लेकिन मुझे कम से कम एक चुनने के लिए उन्हें मजबूर करना है कि उन्हें चुनने के लिए मजबूर करना है।मुझे वाईएक्स में कम से कम दो वैकल्पिक घटकों की आवश्यकता कैसे हो सकती है?

यहाँ मेरे वर्तमान WXS के संबंधित भाग है:

<Feature Id="Main" Title="Product Name" Level="1" Absent="disallow" Display="expand" AllowAdvertise="no" 
      Description="This is the application, and is a required component" 
      > 
     <ComponentRef Id="Baseline" /> 
     <ComponentRef Id="Shortcuts" /> 
     <Feature Id="Option1" Title="Plugin #1" Level="2" Absent="allow" AllowAdvertise="no"> 
      <ComponentRef Id="Plugin1Component" /> 
     </Feature> 
     <Feature Id="Option2" Title="Plugin #2" Level="3" Absent="allow" AllowAdvertise="no"> 
      <ComponentRef Id="Plugin2Component" /> 
     </Feature> 
    </Feature> 

मेरा अनुमान है कि यह है कि मैं गारंटी कस्टम क्रिया किसी तरह का अनुक्रम का सही बिंदु पर डाला आवश्यकता पड़ने वाली है कि एक या अन्य स्थापित करने के लिए चुना गया है, लेकिन कोई संकेत नहीं है कि यह कैसे करें, या यदि यह भी सही है। सभी मदद की सराहना की!

उत्तर

2

मुझे लगता है कि आप वास्तव में क्या करना चाहते हैं < मेंतत्व प्रकाशित करें ताकि आपकी स्थिति पूरी होने तक इसे सक्षम न किया जा सके। कुछ की तरह:

<Publish Dialog="..." Control="Next" Event="NewDialog" Value="...">OptionalPkg1Selected OR OptionaloPkg2Selected</Publish> 

हालांकि वहाँ किसी तरह यह करने के लिए इतना है कि सही घटकों पर बाद में इंस्टॉल हो हो गया है, उन परिस्थितियों आधारित है जिस पर घटकों जाँच कर रहे हैं स्थापित करने के लिए कैसे क्या मैं नहीं जानता है ..

+0

हाँ, मैं इसे पहले कोशिश करूंगा। अन्यथा, मुझे विश्वास नहीं है कि वाईएक्स में "या तो" उपलब्ध है। आपके पास एक कस्टम संवाद स्क्रीन भी हो सकती है जहां उपयोगकर्ता को एक विकल्प या दूसरा चुनना होगा। – JasCav

+0

मुझे एहसास है कि यह एक प्राचीन पोस्ट है, लेकिन धन्यवाद जेफ। आपकी पोस्ट ने मुझे सही दिशा में इंगित किया। मैंने नीचे दिए गए एक उत्तर के रूप में, मेरा समर्थन किया है, जो मेरे लिए आधारित है (वह जिसने कम से कम मेरे लिए काम किया है, वाईएक्स v3.7 में)। –

0

मेरे पास अभी तकनीकी परीक्षा चलाने का समय नहीं है, लेकिन बस आपको इंस्टाललेवल संपत्ति की दिशा में इंगित करना चाहते हैं। यह फीचर चयन से संबंधित एक काउंटर-सहज ज्ञान युक्त अवधारणा है। अनिवार्य रूप से इंस्टॉलेशन का एक समग्र इंस्टालवेल है, जो 1 और 32,767 के बीच की संख्या है और प्रत्येक में एक इंस्टॉलेशन लेवल प्रॉपर्टी है, जो कि 32,767 और 32,767 के बीच है। यदि किसी सुविधा का इंस्टॉल स्तर मान उत्पाद की INSTALLLEVEL प्रॉपर्टी से कम या उसके बराबर है, तो सुविधा चालू है: http://kb.acresso.com/selfservice/viewContent.do?externalID=Q103232

आम तौर पर आप इसका उपयोग डिफ़ॉल्ट फीचर स्टेटस सेट करने और ऑपरेटिंग सिस्टम पर छिपी हुई सुविधाओं को अक्षम करने के लिए करते हैं जहां सुविधा नहीं है समर्थित नहीं है। हालांकि, आप कम से कम एक विशेषताओं के चयन को लागू करने के लिए संवाद के अगले बटन ईवेंट पर चलने वाली कस्टम कार्रवाई के साथ इन गुणों का उपयोग करने में सक्षम हो सकते हैं।

और हां, सामान्य रूप से एमएसआई संवादों का कोई मतलब नहीं है, और वे काम करने के लिए जटिल हैं। कुछ मामलों में मैंने समग्र एमएसआई जीयूआई अवधारणा में सीमाओं के आसपास काम करने के लिए एक नियमित विंडोज एक्सई संवाद के साथ अनुक्रम में एक ही संवाद को बदल दिया है।

मुझे ऐसा लगता है कि ऐसा करने का कोई आसान तरीका है। ऐसा लगता है कि यह हालांकि बहुत जरूरी है, इसलिए शायद आप तैनाती समुदायों के साथ की जाँच करें और ध्यान से पढ़ने की सबसे अच्छा तैनाती स्थलों में से कुछ हैं:

+0

शायद http://www.tramontana.co.hu/wix/lesson2.php#2.1 भी। –

+0

हां वास्तव में मैं डिफ़ॉल्ट घटकों को सेट करने के लिए इंस्टाललेवल सुविधा का उपयोग कर रहा हूं (वास्तव में, दोनों में से एक को चुनना)। हालांकि, उपयोगकर्ता ने दोनों को बंद करने से रोक दिया है, जो मैं पूरा करना चाहता हूं। –

+0

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

1

फ़ीचर स्थिति का उपयोग किसी शर्त के रूप में करने के बारे में कैसे करें?

की तरह (& Option1 = 2) और (& Option2 = 2)

यहाँ बेहतर समझ के लिए एक कड़ी है कुछ:

MSI Advanced Custom Actions

+0

यही वह है जो मैंने किया। मैंने फ़ीचर राज्यों को लेवल 0 (कोई इंस्टॉल नहीं) –

4

मुझे पता है यह एक पुरानी पोस्ट है, लेकिन इस यूआई फीचरट्री के साथ WIX v3.7 का उपयोग करके मैंने इसे हल किया है:

<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">&amp;MyAppClientFeature=3 OR &amp;MyAppPrinterFeature=3</Publish> 

पूर्ण फ़ीचर री ओवरराइड कोड:

<UI Id="WixUI_FeatureTreeCustom"> 
    <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" /> 
    <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" /> 
    <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> 

    <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" /> 
    <Property Id="WixUI_Mode" Value="FeatureTree" /> 

    <DialogRef Id="ErrorDlg" /> 
    <DialogRef Id="FatalError" /> 
    <DialogRef Id="FilesInUse" /> 
    <DialogRef Id="MsiRMFilesInUse" /> 
    <DialogRef Id="PrepareDlg" /> 
    <DialogRef Id="ProgressDlg" /> 
    <DialogRef Id="ResumeDlg" /> 
    <DialogRef Id="UserExit" /> 

    <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish> 

    <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish> 
    <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish> 

    <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish> 
    <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg">LicenseAccepted = "1"</Publish> 

    <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">Installed</Publish> 
    <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg" Order="2">NOT Installed</Publish> 
    <Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">&amp;MyAppClientFeature=3 OR &amp;MyAppPrinterFeature=3</Publish> 

    <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">NOT Installed OR WixUI_InstallMode = "Change"</Publish> 
    <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish> 
    <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish> 

    <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish> 

    <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="CustomizeDlg">1</Publish> 
    <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> 
    <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> 
    <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish> 
</UI> 

<UIRef Id="WixUI_Common" /> 

मुझे आशा है कि इससे किसी को मदद मिलेगी।

+0

में दो विकल्पों में से एक को मजबूर करने के लिए एक शर्त के रूप में उपयोग किया। पोस्ट करने का शुक्रिया। –

संबंधित मुद्दे