2012-10-08 9 views
21

जिस परियोजना पर मैं काम कर रहा हूं, उसके लिए मुझे ClickOnce का उपयोग करने की अनुमति नहीं है। मेरा मालिक चाहता है कि कार्यक्रम "वास्तविक" (इंस्टॉलर के साथ, आदि) को देखना चाहें।क्लिकऑन के बिना स्वचालित रूप से एप्लिकेशन को कैसे अपडेट करें?

मैं Visual Studio 2012 व्यावसायिक स्थापित किया है, और InstallShield इंस्टालर के साथ चारों ओर खेल रहे हैं, और यह निश्चित रूप से अच्छा संस्थापक बनाता है, लेकिन मैं कैसे आवेदन को सक्षम करने को समझ नहीं सकता "स्वत: अद्यतन" (है कि, जब तक है यह शुरू होता है, यह सुनिश्चित करने के लिए जांच करता है कि यह नवीनतम संस्करण का उपयोग कर रहा है)।

मुझे कोड में एक छोटा सा परिवर्तन करने के लिए कहा गया है - एक घटाव के लिए एक स्विच स्विचिंग, और मैं वास्तव में लोगों को पुराने संस्करण को अनइंस्टॉल करना नहीं चाहता, और फिर हर बार नए संस्करण को पुनर्स्थापित करना होगा मैं इस तरह एक छोटा बदलाव करता हूँ।

मैं अपडेट के लिए एप्लिकेशन की जांच कैसे कर सकता हूं, और उन्हें इंस्टॉल कर सकता हूं? या यह संभव नहीं है (या आसान नहीं)?

+0

के संभावित डुप्लिकेट [नेट के लिए स्वत: अपडेट पुस्तकालय?] (Http://stackoverflow.com/questions/691663/auto नई फ़ाइल की प्रतिलिपि -अपडेट-लाइब्रेरी-नेट-नेट) –

उत्तर

15

इस बारे में पहले से ही बहुत सारे प्रश्न हैं, इसलिए मैं आपको उनसे संदर्भित करूंगा।

एक बात आप स्थापना रद्द करने के लिए की जरूरत को रोकने के लिए यह सुनिश्चित करना चाहते है, कि तुम हर रिहाई पर एक ही उन्नयन कोड का उपयोग, लेकिन उत्पाद कोड बदल रहा है। ये मान Installshield प्रोजेक्ट गुणों में स्थित हैं।

कुछ संदर्भों:

+1

मैंने यह कोशिश की है - उत्पाद कोड में जा रहा है और बदल रहा है। लेकिन जब मैं पुनर्स्थापित करने के लिए जाता हूं, तो यह कहता है कि यह इंस्टॉल हो रहा है, लेकिन प्रोग्राम को बिल्कुल भी नहीं बदलता .... कोई विचार? धन्यवाद :) – Toadums

+0

ओह, ऐसा प्रतीत होता है कि यह वास्तव में इसे पुनः स्थापित करता है (कई बार), लेकिन मेरे कंप्यूटर पर फ़ाइलों को कभी भी अपडेट नहीं किया – Toadums

+0

क्या पहले से स्थापित संस्करण किया गया था ताकि आपके वर्तमान इंस्टॉलर के समान अपग्रेड कोड का उपयोग किया जा सके? यदि नहीं, तो आपको ओर्का का उपयोग करने की आवश्यकता हो सकती है। यह प्रश्न भी देखें: http://stackoverflow.com/q/11540520/161052 – JYelton

1

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

आवेदन अपडेट फ़ाइल // एक अद्वितीय स्ट्रिंग है कि आपके आवेदन फ़ाइल प्रकार

संस्करण पहचान: 1.0.0 // नवीनतम विधानसभा संस्करण

डाउनलोड: http://yourserver.com/ ... // डाउनलोड संस्करण के लिए एक लिंक

redicrect: http://yournewserver.com/ ... // मैं इस फाई का इस्तेमाल किया सर्वर पते में बदलाव के मामले में बड़ा। इससे ग्राहक को पता चलेगा कि उन्हें एक नए पते को देखने की जरूरत है।

आप अन्य महत्वपूर्ण विवरण भी जोड़ सकते हैं।

+0

जो समझ में आता है। लेकिन आप इस संदेश से कैसे बचते हैं: "इस प्रोजेक्ट का एक और संस्करण पहले ही इंस्टॉल हो चुका है ...." जब आप पुनः इंस्टॉल करने के लिए जाते हैं? – Toadums

+0

जैसा कि @ जेयलटन द्वारा इंगित किया गया है वही अद्यतन कोड रखें। अन्य तरीके हैं, लेकिन मैं भूल गया :( –

1

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

खुला नोटपैड मदद और .bat

xcopy \\IP address\folder_share_name\*.* /s /y /d /q 
start "label" /b "youraplicationname.exe" 
3

ext के साथ नीचे फाइल को सेव मुझे लगता है कि आप codeplex.com http://autoupdater.codeplex.com/

पर निम्न परियोजना की जाँच करनी चाहिए यह नमूना आवेदन सी ​​# के रूप में विकसित किया गया है हो सकता है प्रोजेक्ट नाम "ऑटो अपडेटर" वाला एक लाइब्रेरी। डीएलएल "ऑटो अपडेटर" का उपयोग सी # विंडोज एप्लिकेशन (विनफॉर्म और डब्ल्यूपीएफ) में किया जा सकता है।

  1. आसान लागू करने और उपयोग करने के लिए:

    AutoUpdater के बारे में कुछ खास सुविधाएं हैं।

  2. अद्यतन की जांच के बाद स्वचालित स्वचालित रूप से पुन: चलाएं।
  3. उपयोगकर्ता को पारदर्शी प्रक्रिया अद्यतन करें।
  4. बहु थ्रेडेड डाउनलोड का उपयोग करके मुख्य धागे को अवरुद्ध करने से बचने के लिए।
  5. सिस्टम और ऑटो अपडेट प्रोग्राम को अपग्रेड करने की क्षमता।
  6. एक कोड जिसे विभिन्न सिस्टम द्वारा उपयोग किए जाने पर परिवर्तन की आवश्यकता नहीं होती है और लाइब्रेरी में संकलित किया जा सकता है।
  7. उपयोगकर्ता के लिए अद्यतन फ़ाइलों को डाउनलोड करने के लिए आसान है।

उपयोग कैसे करें?

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

#region check and download new version program 
    bool bHasError = false; 
    IAutoUpdater autoUpdater = new AutoUpdater(); 
    try 
    { 
     autoUpdater.Update(); 
    } 
    catch (WebException exp) 
    { 
     MessageBox.Show("Can not find the specified resource"); 
     bHasError = true; 
    } 
    catch (XmlException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Download the upgrade file error"); 
    } 
    catch (NotSupportedException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Upgrade address configuration error"); 
    } 
    catch (ArgumentException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Download the upgrade file error"); 
    } 
    catch (Exception exp) 
    { 
     bHasError = true; 
     MessageBox.Show("An error occurred during the upgrade process"); 
    } 
    finally 
    { 
     if (bHasError == true) 
     { 
      try 
      { 
       autoUpdater.RollBack(); 
      } 
      catch (Exception) 
      { 
      //Log the message to your file or database 
      } 
     } 
    } 
    #endregion 
1

एक लेज़ पुरुषों की तरह से

मुख्य पर

है() और कुछ बात जांच की तारीख और समय के लिए क्रियान्वित विधानसभा फ़ाइल .exe का नाम बदलने के लिए बनाया की। और अद्यतन फ़ाइल दिनांक समय और एप्लिकेशन फ़ोल्डर में प्रतिलिपि बनाएँ।

//Rename he executing file 
System.IO.FileInfo file = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); 

System.IO.File.Move(file.FullName, file.DirectoryName + "\\" + file.Name.Replace(file.Extension,"") + "-1" + file.Extension); 

तो तर्क की जांच करते हैं और फ़ोल्डर को क्रियान्वित करने के

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