2012-10-05 13 views
5

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

मैं क्या करना चाहता हूं कि उपयोगकर्ता लाइसेंस के खिलाफ फीचर संस्करण को सत्यापित करना और उपयोगकर्ता को चेतावनी देना कि उसके लाइसेंस को इंस्टॉल करने से पहले अपडेट किया जाना चाहिए।

मैंने सोचा कि मैं इसे एक कस्टम ग्रहण पी 2 टचपॉइंट एक्शन वैधेट लाइसेंस का उपयोग करके करूँगा।

उदाहरण:

मेरे कोड, कहा जाता है, जहां मैं उपयोगकर्ता का लाइसेंस के खिलाफ संस्करण को मान्य। अगर यह विफल रहता है तो मैं उपयोगकर्ता को चेतावनी देता हूं और फिर वह स्थापना रद्द कर सकता है।

तो मेरा पहला सवाल यह है:

  • मैं यह अधिकार मिलता है, या यह यह करने के लिए कुछ अन्य तरीका है?

मेरे दूसरे प्रश्न सुंदर बुनियादी है:

  • मैं कहां से ग्रहण बता मेरी कोड को चलाने के लिए करते हैं? मैंने here at eclipse help देखा है जहां वे बताते हैं कि यह क्या है। लेकिन मुझे नहीं पता कि जानकारी को मेरे कोड को चलाने के लिए कहां रखा जाए? क्या यह सुविधा.एक्सएमएल में है।

अन्त:

  • वहाँ एक उदाहरण बना सकते हैं और उपयोग p2 touchPonts करने के लिए कैसे है?

उत्तर

1

मैंने here दिखाए गए एक कस्टम क्रिया को लागू किया और मेरे पास एक ऐसा सिस्टम है जो काम करने लगता है। मैंने "टचपॉइंट" एक्सटेंशन छोड़ा क्योंकि यह मेरे मामले में अनावश्यक है, लेकिन शेष वही है।

मेरी कार्रवाई मेरी सुविधा (instruct.install) के स्थापित चरण के दौरान निष्पादित की जाती है लेकिन शायद कॉन्फ़िगर चरण भी काम कर सकता है। संकल्प चरण काम नहीं किया था।

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

मैं कुछ और दिलचस्प चीजें करने में भी कामयाब रहा। मेरे क्रिया प्लगइन में मेरी मुख्य प्लगइन पर एक निर्भरता (वैकल्पिक और गैर लालची) है। तो इस तरह से काम करता है स्थापित:

  • क्रिया प्लगइन डाउनलोड किया जाता है
  • कस्टम कार्रवाई
  • निष्पादित किया जाता है कार्रवाई का पता लगाता है मेरी मुख्य प्लगइन पहले से स्थापित है कि क्या और जानकारी लाइसेंस पुनः प्राप्त करने यदि हाँ, यह इसे में कहता है। मुख्य प्लगइन को कार्रवाई के लिए एक एपीआई का पर्दाफाश करना पड़ता है। एक्शन एपीआई है या नहीं, यह पता लगाने के लिए कार्रवाई मुख्य प्लगइन के संस्करण की भी जांच करती है।
  • अब कार्रवाई यह तय कर सकती है कि इंस्टॉल को आगे बढ़ाना या रद्द करना है या नहीं। यह प्रदर्शन # syncExec का उपयोग कर उपयोगकर्ता के साथ भी बातचीत कर सकता है (चेक-ट्रस्ट चरण में यह कोड है, इसलिए मुझे लगता है कि यह सुरक्षित है)। यदि आवश्यक हो, तो कार्रवाई यह भी पता लगा सकती है कि इंस्टॉल हेडलेस है या नहीं।

कुछ gotchas:

  • कार्रवाई ही संस्करणीकृत किया जाना चाहिए। यह वह संस्करण है जिसे आप प्लगइन.एक्सएमएल और पी 2.in एफ फाइलों में घोषित करते हैं और यह प्लगइन के संस्करण से अलग है। मैं सिर्फ 1.0.0 को उसी प्लगइन के साथ बदलता हूं जो मेरे प्लगइन में है। इस तरह एक्शन प्लगइन का नवीनतम संस्करण हमेशा निष्पादित होने से पहले डाउनलोड किया जाता है। यह बहुत अच्छा है क्योंकि अब लाइसेंसिंग नियमों में कोई समस्या बदलती है क्रिया क्रियाकलाप में लागू किया जा सकता है।
  • एक्शन एपीआई ग्रहण 3.5 और 3.6 के बीच बदल गया। मैं शायद 3.5 के लिए समर्थन छोड़ दूंगा क्योंकि यह वैसे भी पुराना है।
  • क्रिया प्लगइन शायद हस्ताक्षरित होना चाहिए। मेरे मामले में यह मामला है। यह प्रणाली मेरे लिए लगभग बहुत शक्तिशाली प्रतीत होती है क्योंकि एक्स्प्से को एक अपडेट साइट पर इंगित करने से यह डाउनलोड कोड निष्पादित हो जाता है।

मुझे अभी भी यह जांचने की आवश्यकता है कि यह ग्रहण और अन्य आईडीई के विभिन्न संस्करणों के साथ कैसे काम करता है। मैंने 3.6 के साथ एक अजीब (गैर-अवरुद्ध) त्रुटि देखी। हालांकि परिणाम वादा कर रहे हैं और ऐसा लगता है कि सिस्टम वास्तव में काम कर सकता है।

+0

यह वास्तव में बहुत अच्छा था! धन्यवाद – giZm0

1

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

उदाहरण के लिए, com.mycompany.license (1.0.0) नामक एक IU बनाएं। आप com.mycompany.license (2.0.0) नामक एक और बनायेंगे। जब आप लाइसेंस स्थापित करते हैं, तो उपयुक्त आईयू प्रोफ़ाइल में जोड़ा जाएगा।

अब, जब आप उत्पाद इंस्टॉल करने के लिए जाते हैं, तो उत्पाद के नए संस्करण को लाइसेंस संस्करण 2.0.0 की आवश्यकता होगी। अगर यह लाइसेंस स्थापित नहीं किया गया था, तो संकल्प विफल हो जाएगा।

क्या यह समझ में आता है? क्या आपको लगता है कि इससे मदद मिलेगी?

+0

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

+0

आप कोड क्यों चलाना चाहते हैं? यदि आपको मनमाने ढंग से कोड चलाने की आवश्यकता है, तो हाँ, आपको टचपॉइंट की आवश्यकता होगी। लेकिन एक टचपॉइंट इंस्टॉलेशन को असफल नहीं कर सकता है (ठीक है, मुझे लगता है कि आप एक अपवाद फेंक सकते हैं और सबकुछ वापस रोल करने का प्रयास कर सकते हैं, लेकिन यह वास्तव में उनका काम नहीं है)। यदि आप यह सत्यापित करना चाहते हैं कि लाइसेंस वास्तव में सही है, तो मैं इसे रनटाइम (समय स्थापित नहीं) पर करूँगा, और यह सुनिश्चित करने के लिए कि उपयोगकर्ता को अमान्य स्थिति में नहीं मिलता है, केवल आईयू चाल का उपयोग करें। दस्तावेज़ों के लिए, यहां कुछ है http://wiki.eclipse.org/Equinox/p2/Customizing_Metadata। – irbull

+0

प्रमाणीकरण को सत्यापित करने में सक्षम होने के लिए कुछ कोड चलाने की आवश्यकता है। मैं किसी सर्वर के खिलाफ जांच करता हूं या कुछ मामलों में केवल "कीस्टोर" की जांच करता हूं। एक अपवाद फेंकने का विचार या चेक के दौरान केवल झूठी वापसी, जैसे कि यदि आप एक निर्भरता खो रहे हैं तो मैं वही करना चाहता था। लेकिन मैं इसे काम करने के लिए नहीं मिल सकता है। मैं आईयू पर नजदीकी नजर रखूंगा लेकिन पहली नज़र में यह वास्तव में मेरी मदद नहीं करता है। धन्यवाद! – giZm0

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