2014-09-05 9 views
10

मैं एक क्लाइंट एप्लिकेशन (.NET) विकसित कर रहा हूं जो स्वचालित रूप से अपडेट हो सकता है। एप्लिकेशन को एक सरल वाईएक्स/एमएसआई इंस्टॉलर का उपयोग करके तैनात किया जाएगा।स्वचालित अपडेट फ्रेमवर्क/इंजन

क्या मैं जरूरत है:

फ़ाइल संस्करणों/हैश के लिए
  • चेक सर्वर/तारीखें
  • नए फ़ाइलें
  • अद्यतन फ़ाइलों को डाउनलोड करें & फिर से लॉन्च आवेदन।

क्या इस संग्रह के लिए कोई उपयुक्त फ्रेमवर्क/पैटर्न हैं?

मैंने पाया/करने की कोशिश की है:

  • ClickOnce (हमारी जरूरतों फिट नहीं करता है के रूप में यह पहले कार्यकाल में विस्तृत आवेदन मशीन स्थापित करने में सक्षम नहीं है)
  • wyUpdate
  • बंद किया जा रहा है
  • क्लिक थ्रेड को बंद कर दिया गया है
  • Google ओमाहा जो मैं कोशिश करता हूं उसके लिए जटिल होने का तरीका दिखता है।

क्या इसके लिए कोई सक्रिय विकसित और विश्वसनीय समाधान है (उन्हें मुक्त होने की आवश्यकता नहीं है और न ही ओपनसोर्स)?

+0

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

+0

मुझे पहले से ही ऐसा कुछ उम्मीद है हालांकि मैं अभी भी एक मौजूदा समाधान पसंद करूंगा क्योंकि यह एक बहुत ही आम काम है जो मुझे लगता है। क्या आप वाईएक्स उदाहरण को लिंक कर सकते हैं? – Console

+0

आप क्यों कहते हैं कि क्लिक बंद हो गया है? यहां तक ​​कि अगर यह भी था, तो यह एक अच्छा प्रारंभिक बिंदु है, खासकर विक्स पर्यावरण में: https://github.com/wixtoolset/wix4/tree/develop/src/tools/ct –

उत्तर

2

हो सकता है कि निम्नलिखित उपयोगी है:

https://autoupdaterdotnet.codeplex.com/

या आप कि एक कोशिश दे सकते हैं:

https://github.com/synhershko/NAppUpdate

कम से कम इन दोनों सक्रिय और प्रयोग करने में आसान लग रहे हैं।

+0

दोनों बहुत विश्वसनीय नहीं लगते हैं। मैं पहले से ही autoupdateerdotnet में आया था, लेकिन डाउनलोड और तिथियां मुझे विश्वास नहीं करती हैं। Althought मैं NAppUpdate – Console

0

मुझे लगता है कि आप इसे स्वयं कोड कर सकते हैं। की तरह नीचे कोड में:

Imports System.Net 

Public Class frmMain 
    Private WithEvents WebC As New WebClient 
    Private updatefilename As String 
    Private WithEvents updateTimer As New Timer With {.Enabled = True, .Interval = 300000} '300000 is 5 min 

    Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     CheckUpdatePHP() ' you can use the php method or the normal method 
    End Sub 

    Private Sub CheckUpdatePHP() Handles updateTimer.Tick 
     Dim ServerVer As String = WebC.DownloadString("http://yourdomainname.com/update.php?get=ver") 
     If Not Application.ProductVersion.Equals(ServerVer) Then 
      Dim updateURL As String = WebC.DownloadString("http://yourdomainname.com/update.php?get=url") 
      updatefilename = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".exe" 
      WebC.DownloadFileAsync(New Uri(updateURL), updatefilename) 
     End If 
    End Sub 

    Private Sub CheckUpdate() 'Handles updateTimer.Tick 
     Dim ServerInfo As String = WebC.DownloadString("http://yourdomainname.com/version.txt") 
     Dim Infos As String() = ServerInfo.Split("%split%") 
     If Not Application.ProductVersion.Equals(Infos(0)) Then 
      Dim updateURL As String = WebC.DownloadString(Infos(1)) 
      updatefilename = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".exe" 
      WebC.DownloadFileAsync(New Uri(updateURL), updatefilename) 
     End If 
    End Sub 

    Private Sub WebC_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles WebC.DownloadFileCompleted 
     Dim pinfo As New ProcessStartInfo(updatefilename) 
     pinfo.WindowStyle = ProcessWindowStyle.Hidden 
     pinfo.CreateNoWindow = True 
     Process.Start(pinfo) 
     End 
    End Sub 
End Class 

version.txt इस तरह दिखना चाहिए:
अपने Form के लिए नीचे दिए गए कोड का उपयोग करें यदि आप php विधि का उपयोग करेगा

1.0.0.0%split%http://yourdomainname.com/update.exe 

upload.php, इस का उपयोग करना चाहिए कोड:

<?php 
    if(isset($_GET['get'])){ 
     $get = $_GET['get']; 
     $txt = file_GET_contents("version.txt"); 
     $info = explode("%split%",$txt); 
     if($get = 'ver'){ 
      echo $info[0]; 
     }elseif($get = 'url'){ 
      echo $info[1]; 
     } 
    } 
?> 

यदि आप PHP method का उपयोग करेंगे तो आप शोल करेंगे डी इसे अपने फॉर्म कोड से हटा दें, सामान्य विधि के लिए आप version.txt फ़ाइल और update.exe को अपने ड्रॉपबॉक्स खाते में अपलोड कर सकते हैं और उनका उपयोग कर सकते हैं।
पूछने के लिए स्वतंत्र महसूस करें।

+0

पर एक नज़र डालेगा, इसके लिए धन्यवाद, मुझे पता है कि अद्यतन स्वयं ही एक बुनियादी कार्य है, लेकिन मुझे लगता है कि विवरण (सुरक्षा/त्रुटि प्रबंधन/प्रमाणीकरण) में बहुत सारे नुकसान हैं। – Console

+0

आप इन कोडिंग को सरल कोडिंग द्वारा जोड़ते हैं। – user3980820

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