2009-07-31 17 views
11

हमारे पास न्यूनतम 'अपडेटर' exe है जो अद्यतनों के लिए एक दूरस्थ यूआरएल जांचता है, उन्हें डाउनलोड करता है और वास्तविक एप्लिकेशन लॉन्च करने से पहले डिस्क पर फ़ाइलों को प्रतिस्थापित करता है। हालांकि अगर हम अद्यतनकर्ता EXE को प्रतिस्थापित करना चाहते हैं तो AFAIK हमारे पास दो विकल्प हैं:स्व-अद्यतन सॉफ्टवेयर को लागू करने के लिए सर्वोत्तम विधि

1) Shadow Copying Assemblies जिससे नेट .NE (और किसी भी संदर्भित असेंबली) की छाया प्रतिलिपि बनाएगा और उन असेंबली को लोड करेगा, जैसे गैर- छाया असेंबली को प्रतिस्थापित किया जा सकता है और जब एप्लिकेशन को लॉन्च किया जाता है तो इसका उपयोग किया जाएगा।

2) पहचानें कि कौन सी फाइलें प्रतिस्थापित की गई हैं और उन्हें नाम पर बदलें/स्थानांतरित करें। विंडोज लॉक की गई फाइलों के नामकरण/चलने की अनुमति देता है, इसलिए हम फ़ाइलों को स्थानांतरित कर सकते हैं और नई असेंबली में कॉपी कर सकते हैं। फिर, आवेदन को लॉन्च करने पर हम नई असेंबली लॉन्च करेंगे। इस दृष्टिकोण का उल्लेख here

क्या यह दूसरी विधि एक अनुशंसित विधि है? क्या इस दृष्टिकोण के लिए कोई नुकसान है?

उत्तर

6

ClickOnce परिनियोजन के बारे में क्या?

+0

में टिप्पणी के लिए –

+0

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

+1

क्लिकऑन एक दुःस्वप्न है क्योंकि यह लचीला, अत्यधिक जटिल है, ऐसा लगता है कि कोई मजबूत माइक्रोसॉफ्ट समर्थन नहीं है, और प्रति उपयोगकर्ता तैनाती परिदृश्यों के लिए बहुत विशिष्ट है। – jpierson

6

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

+0

उचित – jpierson

+0

@jpierson लगता है और यह काम करता है :)। मैं अपने आवेदन के लिए अब 2 साल के लिए इस दृष्टिकोण का उपयोग कर रहा हूं। –

8

मैं बिना किसी समस्या के दूसरी विधि का उपयोग कर रहा हूं। बस सुनिश्चित करें कि डाउनलोड की गई असेंबली सही ढंग से डाउनलोड की गई थी। ;)

भागो Update.exe और यह इसे करते हैं:
1. डाउनलोड नई Update.exe के रूप में update.ex_
2. Update.exe नाम बदलने update.bak को (यदि आप इसे नाम बदल सकते हैं, लेकिन यह अधिलेखित नहीं)
3. update.ex_ नाम बदलने
4. पुनः आरंभ

Update.exe

इम बिल्कुल इसलिए इसकी जांच की कोई समस्या नहीं के साथ ऐसा करने और करीब 400 ग्राहकों में रहते हैं वातावरण में चल रहे हैं Update.exe के लिए जैसे हम बोलते हैं।

+0

मैं वर्तमान में चल रहे प्रोग्राम को पुनरारंभ कैसे करूं? क्या कोई आसान तरीका है? – chillitom

+0

@chilitom: process.start (application.StartupPath & "\ myprogram.exe"): चरण # 2 – Stefan

+0

+1 अंत में यह संभवतः सबसे अच्छा विकल्प है क्योंकि इसे सुरक्षा स्तर अपग्रेड/डाउनग्रेडिंग को मानकीकृत करने में मदद करनी चाहिए विंडोज़ विस्टा और विंडोज़ के भविष्य के संस्करणों में आवश्यक – jpierson

1

जिस तरह से हम हमारे घर में ऐप्लिकेशन से कार्य करें:

अनुप्रयोग शॉर्टकट अपडेटर पर अंक।

  1. डाउनटाइम नोटिफिकेशन/समय सीमा संदेश प्रदर्शित होते हैं।
  2. अद्यतनकर्ता अद्यतन जांच करता है।
  3. अपडेट डाउनलोड और स्थापित हैं।
  4. एप्लिकेशन लॉन्च किया गया है।
  5. आवेदन करता है अपडेटर का अद्यतन (/ अद्यतन फ़ोल्डर में Updater.fp7.gz के लिए चेक)

संपादित करें: उफ़ - याद किया कदम 5.

+2

आपने सही प्रश्न पढ़ा है? आप अपने परिदृश्य में खुद को अद्यतनकर्ता कैसे अपडेट करते हैं? –

3

एक परियोजना में मैं पर काम किया, जहां 2 निष्पादन योग्य आइए उन्हें ए और बी

बीशुरू करने का एकमात्र कारण था, इसलिए जब बी ('असली' एप्लिकेशन) ने एक अद्यतन डाउनलोड किया, तो यह ए अगर नेक्सेसरी को प्रतिस्थापित करने में सक्षम था।

तो आवेदन को पुनः आरंभ किया गया था (ए) के माध्यम से, एक अगर B कुछ फ़ाइलों को डाउनलोड करने और उन्हें प्रतिस्थापित जाँच से पहले यह बी

+0

हाल ही में मैंने इस तथ्य को ठोकर दिया कि एक चल रहे निष्पादन योग्य को अधिलेखित नहीं किया जा सकता है लेकिन इसका नाम बदला जा सकता है। मैंने खुद को टेस्ट ऐप में यह करने की कोशिश की है और मैं अपने स्वयं के एप्लिकेशन स्वयं अपडेटर घटक को विकसित करने के लिए इस तकनीक का उपयोग करूँगा। – jpierson

+1

छाया प्रतिलिपि (http://msdn.microsoft.com/en-us/library/ms404279.aspx) में एक नज़र डालें। हम ग्राहकों को टर्मिनल सर्वर पर क्लाइंट सॉफ़्टवेयर अपडेट करने की अनुमति देने के लिए इसका उपयोग करते हैं जबकि अन्य उपयोगकर्ता एक ही समय में उसी मशीन पर एप्लिकेशन चला रहे हैं। – sloth

0

शुरू कर दिया मैं ज्यादातर Stefan's Answer है कि यह काम नहीं कर सकता के अलावा के साथ सहमत अगर आप ठीक ढंग से करना चाहते हैं विंडोज विस्टा या विंडोज 7 पर यूएसी के साथ सौदा करें और आपका ऐप प्रोग्राम फाइल फ़ोल्डर के तहत ठीक से स्थापित है या अन्य निर्भरताओं को स्थापित करने की आवश्यकता है जिसके लिए उच्च अनुमति की आवश्यकता है।

इस मामले में आप या तो एक एमएसआई आधारित इंस्टॉल/पैच कर रहे हैं या एक विंडोज सेवा स्थापित कर रहे हैं जो प्रोग्राम फ़ाइलों फ़ोल्डर में फ़ाइलों को ओवरराइट करने के लिए आवश्यक सुरक्षा के साथ चलता है।

अन्य विकल्प यदि आपका ऐप इंटरैक्टिव है तो इगोर ब्रेजक सुझाव देता है और एक नई प्रक्रिया को जन्म देता है जो अद्यतन करता है जो आपके ऐप को अपडेट के दौरान अनुमतियों को बढ़ाने के लिए संकेत देने का मौका देता है। उपरोक्त वर्णित पैच या विंडोज सर्विस विकल्प का उपयोग करना हालांकि परिदृश्य (इंटरैक्टिव/गैर-इंटरैक्टिव) के बावजूद बेहतर उपयोगकर्ता अनुभव प्रदान करेगा।

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

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