2011-09-05 20 views
25

मैं एक कस्टम क्रिया है और VS2010 फ़ोल्डर में स्थापना फ़ोल्डर से कुछ भागों कॉपी करने के लिए मूल्यों को नीचे प्राप्त करने की आवश्यकताक्या स्थगित कस्टम कार्रवाई में सत्र विवरण तक पहुंचने का कोई वैकल्पिक तरीका है?

  1. VS2010 निर्देशिका पथ (VS2010DEVENV संपत्ति)
  2. स्थापना पथ (INSTALLLOCATION संपत्ति)

पर्याप्त विशेषाधिकार देने के लिए, मैंने Execute='deferred' Impersonate='no' के रूप में कस्टम कार्रवाई सेट की है। लेकिन जब संस्थापक चल रहा है, यह संदेश लॉग इन:

एक गैर तत्काल कस्टम क्रिया

ऐसा लगता है कि हम एक "आस्थगित" कस्टम क्रिया में एक संपत्ति उपयोग नहीं कर सकते से सत्र विवरण तक नहीं पहुंच सकता (यानी session["VS2010DEVENV"])

क्या कोई अन्य तरीका है ताकि मैं आवश्यकतानुसार उन मानों को पुनर्प्राप्त कर सकूं?

उत्तर

28

This सहायक होना चाहिए। पृष्ठ के निचले हिस्से पर विशेष ध्यान दें, CustomActionData के माध्यम से मूल्यों को पारित करने के लिए 2 चरणों का दिशानिर्देश।

  1. स्थापना में एक छोटी सी कस्टम क्रिया सम्मिलित करें:

    एक आस्थगित निष्पादन कस्टम क्रिया के दौरान प्रयोग के के लिए स्थापना स्क्रिप्ट में एक संपत्ति के मूल्य लिखने के लिए:

    यहाँ अंश है अनुक्रम जो के समान नाम वाले किसी संपत्ति के लिए ब्याज की संपत्ति सेट करता है, स्थगित निष्पादन कस्टम कार्रवाई। उदाहरण के लिए, यदि स्थगित निष्पादन कस्टम कार्रवाई के लिए प्राथमिक कुंजी है "MyAction" एक प्रॉपर्टी को संपत्ति X में "MyAction" नाम दिया गया है जिसे आपको पुनर्प्राप्त करने की आवश्यकता है। आप को "MyAction" प्रॉपर्टी को "MyAction" कस्टम एक्शन से पहले इंस्टॉलेशन अनुक्रम में सेट करना होगा। हालांकि किसी भी प्रकार की कस्टम एक्शन संदर्भ डेटा सेट कर सकती है, लेकिन सबसे आसान तरीका प्रॉपर्टी असाइनमेंट कस्टम एक्शन (उदाहरण के लिए कस्टम एक्शन टाइप 51) का उपयोग करना है।

  2. उस समय जब स्थापना अनुक्रम संसाधित किया जाता है, तो इंस्टॉलर प्रॉपर्टी एक्स का मान निष्पादन स्क्रिप्ट में कस्टमएक्शनडेटा के मूल्य के रूप में लिखता है।
+3

धन्यवाद MyExecutableFile ") ] (http://msdn.microsoft.com/en-us/library/aa370543.aspx)। ** CustomActionData ** संपत्ति अच्छी तरह से काम करती है। लेकिन मैं सोच रहा हूं कि हम एक से अधिक मूल्य कैसे पारित कर सकते हैं। मेरे मामले में, मुझे VS2010 और स्थापना फ़ोल्डर मान दोनों की आवश्यकता है। यदि आप संभव हो तो कुछ संकेत दे सकते हैं? – jcha

+11

आपको स्थगित कस्टम कार्रवाई में पारित स्ट्रिंग को पार्स करना होगा। उदाहरण के लिए, आप '[VS2010DEVENV] | [INSTALLLOCATION]' पास कर सकते हैं, और कस्टमएक्शनडेटा को स्थगित सीए में '|' द्वारा विभाजित कर सकते हैं। यदि आप अपने सीए के लिए डीटीएफ का उपयोग करते हैं, तो इसमें एक शब्दकोश जैसे कस्टमएक्शनडेटा प्रॉपर्टी है, और आप इसे 'vs2010 = [VS2010DEVENV]; स्थान = [इंस्टाललोकेशन]' जैसे पास कर सकते हैं, और इसे 'session.CustomActionData ["vs2010"] प्राप्त कर सकते हैं। 'और' सत्र। कस्टमएक्शनडेटा ["स्थान"] ' –

+0

बढ़िया! यह पूरी तरह से मेरे मामले हल करता है। आपकी सलाह के लिए बहुत बहुत धन्यवाद। – jcha

11

अतिरिक्त विवरण:

PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=... 
: कई गुण मान एक "कस्टम क्रिया प्रकार 51" (जो मूल रूप से है कि एक संपत्ति के मूल्य सेट सिर्फ एक कस्टम क्रिया है) में निम्न सिंटैक्स का उपयोग करके पारित किया जा सकता

मान इस तरह कस्टम क्रिया के भीतर से प्राप्त किए जा सकते हैं:

string prop1 = session.CustomActionData["PROPERTY1"]; 
string prop2 = session.CustomActionData["PROPERTY2"]; 

यहाँ एक उदाहरण है कि आईडी के साथ "MyCustomAc एक कस्टम कार्रवाई के लिए संपत्ति मूल्यों सेट है tion ":

<CustomAction 
    Id="SetCustomActionPropertyValues" 
    Property="MyCustomAction" 
    Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" /> 

(स्वरूपित वाक्य रचना बारे में अधिक जानकारी है जो इस उदाहरण में आईडी के साथ एक फ़ाइल का स्थान स्थापित पुनः प्राप्त करने के लिए प्रयोग किया जाता है this MSDN article पढ़ें" के लिए [संदर्भ

+4

ठोस उदाहरण के लिए बहुत धन्यवाद। मुझे जिस चीज की जरूरत थी। आगे के विवरण और उदाहरणों के लिए भविष्य के आगंतुकों को [यह जवाब] (http://stackoverflow.com/a/11233268/660536) भी देखना चाहिए। – GazTheDestroyer