2012-07-30 17 views
5

दौरान स्थिति पाठ बदलने मैं एक wix संस्थापक में एक सुंदर लंबा CustomAction है, और मुझे 'स्थिति: ...' को बदलने में सक्षम होना चाहता हूँ पाठ, जबकि आपरेशन, चलाता है को देखने के लिए नहीं है कि अपनी आंतरिक स्थिति पर प्रगति और अद्यतन करें। मैं जानता हूँ कि एक कस्टम कार्रवाई की progresstext स्थापित करने के लिए कैसे - लेकिन क्या मैं चाहता हूँ गतिशील कस्टम क्रिया के चलाने के दौरान प्रगति पाठ बदलने के लिए है।WiX: गतिशील CustomAction

उत्तर

8

आस्थगित कस्टम क्रिया MsiProcessMessage समारोह कॉल कर सकते हैं। तुम तो INSTALLMESSAGE_ACTIONSTART, INSTALLMESSAGE_ACTIONDATA और INSTALLMESSAGE_PROGRESS का उपयोग यूआई तक के संदेश को प्रकाशित कर सकते हैं।

एक और संभावना है कि आप अपनी कस्टम कार्रवाई को छोटे कस्टम कार्यों में विभाजित करें और इंस्टॉलेशन के विभिन्न चरणों का वर्णन करने के लिए प्रोग्रेसटेक्स्ट (एक्शनटेक्स्ट टेबल) का उपयोग करें। (प्रत्येक सीए को एक ही जिम्मेदारी बनाएं।)

कभी-कभी जब कोई सीए बहुत अधिक काम करता है तो रोलबैक को सही तरीके से योजना बनाना मुश्किल होता है।

using (Record record = new Record(0)) 
    { 
     record.SetString(0, "foo"); 
     session.Message(InstallMessage.ActionData, record); 
    } 

कथन का उपयोग को मुक्त करने के अंतर्निहित एमएसआई संभालती रिकॉर्ड disposes:

Obtaining Context Information for Deferred Execution Custom Actions

MsiProcessMessage function

सी #/DTF का उपयोग करते हुए यह तरह दिखता है। रिकॉर्ड में फ़ील्ड की संख्या और डेटा सेट करने के तरीके को एक्शनटेक्स्ट तालिका में परिभाषित टेम्पलेट पर निर्भर करने जा रहा है।

+0

धन्यवाद। मुझे विश्वास है कि यह वही है जो मैं ढूंढ रहा था। मेरी कस्टम कार्रवाई सी # में लिखी गई है, क्या आपके पास शायद डीटीएफ के लिए स्पष्टीकरण हो? –

+0

डीटीएफ डॉको में सभी कक्षाएं और सदस्य अंतर्निहित एमएसआई एपीआई समकक्षों का संदर्भ देते हैं और आप उन्हें सहायता फ़ाइल में खोज टैब का उपयोग कर पा सकते हैं। मैं नमूना प्रदान करने के लिए अपना जवाब अपडेट करूंगा। (आपने उल्लेख नहीं किया था कि आप सीए प्रोग्रामिंग कर रहे थे।) –

+0

धन्यवाद। एक जादू की तरह काम करता है :) –

0

क्रिस सही ढंग से कैसे अपने सीए से ActionData को संदेश भेजने के लिए कहा है, लेकिन अगर आप InstallShield का उपयोग कर रहे हैं, तो आप SetupProgress संवाद पर कोई लेबल बना सकते हैं और इसे करने के लिए ActionData पाठ घटना सदस्यता ले सुनिश्चित करें। बस, लेबल के लिए ActionText ईवेंट बनाना पर्याप्त नहीं है क्योंकि यह केवल आपके द्वारा एक्शनटेक्स्ट तालिका में बनाए गए CA विवरण को प्रदर्शित करेगा।