Ana Sayfa... Duyurularım... Ben Kimim ??? Projelerim... Tozlanmış dosyalar... İrtibata Geçin...
 
Vb.Net ile program güncellmesi yapmak

Yazar :  Okan  Düzgün             Yayınlanma Saati :  2015-12-20 19:41:23

Bir program yaptıgımızı düşünelim sonrasında ise bu programa yeni özellikler ekledikçe versiyon numarasının degişip programın güncel versiyonun oldugunu kullanıcılara bildirip ve programın bu güncel versiyonu indirmesini saglayalım.

ilk olarak sunucudan programın güncel versiyonun olup olmadıgını kontrol etmemiz gerek ve bunun için check.aspx dosyası oluşturup, check.aspx sin load kısmına aşagıdaki kodlarımızı yazıyoruz.

Imports System.IO
Partial Class check
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Programımızın versiyonu 2 olarak belirledik.
        Dim versiyoncode As String = 2

        Dim currentversiyon As String = 0

        currentversiyon = Request.QueryString("v").ToString()
        If versiyoncode > currentversiyon Then
            Response.Write("UPDATE")
        Else
            Response.Write("GÜNCEL")
        End If

    End Sub
End Class

yukarıdaki kodlarımızda yaptıklarımıza bakarsak eğer versiyoncode adında bir string değişkeni tanımlayarak buraya programın yeni versiyonu belirliyoruz.

currentversiyon ise program tarafından check.aspx dosyasına bir requeststring ile programın kendi versiyonunu gönderecek ve request.querystring ile programın gönderdiği versiyonu currentversiyon değişkenine atayacagız. Sonrasında ise eğer yeni versiyon programın gönderdiği versiyondan büyükse ise sayfaya update yazdıracagız ve sonrasında program ile update yazısını cekecegiz.

Porgram tarafından cekilen görüntüsüne bakarsak eğer, programa bir tane webbrowser ekleyip bakıyoruz.

Kodlarımıza bakacak olursak ;

Imports System.Net
Imports System.IO
Imports System.ComponentModel
Public Class Form3
    Dim client As New WebClient()
    Dim id As String = 0
    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        id = 1
        Dim uri As New Uri("https://www.okanduzgun.com/check.aspx?v=" + id)
        Dim dosyayolu As Stream = client.OpenRead("https://www.okanduzgun.com/check.aspx?v=" + id)
        WebBrowser1.Url = uri
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        id = 2
        Dim uri As New Uri("https://www.okanduzgun.com/check.aspx?v=" + id)
        Dim dosyayolu As Stream = client.OpenRead("https://www.okanduzgun.com/check.aspx?v=" + id)
        WebBrowser1.Url = uri
    End Sub
End Class

Check id=1 butonuna bastıgımızda hostumuzdaki check.aspx sayfamıza v degişkenine 1 degerini atayıp gönderiyor ve check.aspx sayfamızda biz program versiyon kodumuzu 2 olarak belirttiğimiz için sayfaya update yazıyor ve bizde programla update yazısını cekiyoruz.

Check id=2 butonuna bastıgımızda ise yine aynı işlemler gerçekleşip program güncel yazısını cekiyor ve bu durumda hiç bir işlem yapmıyor. check.aspx sayfamızı ayarladıktan sonra gelelim programımıza;

Programımız çalıştıgında ilk olarak Form1 açılıyor ve bize aşagıdaki uyarıyı veriyor ;

kodlarımız ise ;

' Aşağıdaki referanları projemize import ediyoruz.
Imports System.Net
Imports System.IO
Public Class Form1

    Private Function CheckUpdate() As [Boolean]
        Dim ret As [Boolean]
        Try
            Dim client As New WebClient()
            Dim stream As Stream = client.OpenRead("https://www.okanduzgun.com/check.aspx?v=" + "1")
            'Burdaki domain.com kısmını kendinize göre düzenlemeniz gerek. Artık sunucunuzun ip numarasını yada varsa domain adresinizi yazıp php dosyasını nereye attıysanız onun yolunu bu kısma yazmanız gerek. check.php?v= kısmından sonra yazan kod ise Program.csde tanımladığımız program versionunu çekmeye yarıyor.
            Dim reader As New StreamReader(stream)
            Dim content As String = reader.ReadLine()
            If content = "UPDATE" Then
                'Dönen veriyi kontrol ediyor. Dönen veri UPDATE ise güncelleme aşamasına geçiyor.
                ret = True
            Else
                ret = False
            End If
        Catch
            ret = False
        End Try
        Return ret
    End Function

    Public Sub updateMe()
        Application.Run(New Form2())
    End Sub

    Private Sub UpdateKontrol()
        If CheckUpdate() = True Then
            Dim dialog As DialogResult = MessageBox.Show("Yeni güncellemeler var. " & vbLf & vbCr & "Şimdi yüklemek istermisiniz?", "Güncellemeler Mevcut !!!", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
            If dialog = DialogResult.Yes Then
                Dim t As New Threading.Thread(New Threading.ThreadStart(AddressOf updateMe))
                t.Start()
                Me.Close()
            Else
                Application.Exit()
            End If
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        UpdateKontrol()
    End Sub
End Class

Evet dediğimiz taktirde, Form2 açılıp güncel versiyonu indirmeye başlıyoruz;

İndirme işlemi sonrasında ise ;

seklinde program uyarı vermekte. Form2 kodlarına bakacak olursak ;

Imports System.Net
Imports System.IO
Imports System.ComponentModel
Public Class Form2
    Private destPath As String = Application.StartupPath + "\dosya.exe"
    ' İndirilecek dosyamızın hostumuzdaki yolunu beliyorliyoruz.
    Private GuncelDosya As String = "https://www.okanduzgun.com/xxxx.rar"
    Private DosyaAdi As String
    Public Event DownloadProgressChanged As DownloadProgressChangedEventHandler

    Private Sub indirmeislemidegisim(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)

        'Webclient kısmında tanımladığımız olay tetiklendiğinde bu kısım çalışacak.
        ProgressBar1.Value = e.ProgressPercentage ' indirme esnasındaki degişiklileri progressbar1 value değerine atıyoruz.
        Label1.Text = e.TotalBytesToReceive ' Dosyamızın toplam boyunu belirtiyoruz.
        Label2.Text = e.BytesReceived ' Dosyamızın indirilen byte değerini görüyoruz.
        Label3.Text = e.ProgressPercentage ' Dosyamızın indirilen yüzde kısmını görüntülüyoruz.
        Label4.Text = DosyaAdi ' İndirilen dosyamızın adını görüntülüyoruz.

        'Bu kısımda ise indireceğimiz dosyanın sadece adını ve uzantısını çekiyoruz. Yani GuncelDosya değişkeninde ki linkin gereksiz kısımlarını silip sadece dosya adını ve uzantısını alıyoruz. 
        Dim DosyaAdiUrlAdresi As String = GuncelDosya
        Dim karaktersayisi As Integer = DosyaAdiUrlAdresi.LastIndexOf("/"c)
        DosyaAdi = DosyaAdiUrlAdresi.Remove(0, karaktersayisi + 1)
        Label5.Text = CStr(e.UserState)

    End Sub

    Private Sub indirmeislemitamamlandı(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
        ' İndirme işlemi tamamlandıktan sonra uyarı mesajımızı veriyoruz.
        MessageBox.Show("İndirme işlemi başarıyla gerçekleşti !!!", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
    End Sub

    Private Sub DownLoadFileInBackground2(ByVal address As String)

        Dim client As WebClient = New WebClient()
        '  Specify that the DownloadFileCallback method gets called
        '  when the download completes.
        AddHandler client.DownloadFileCompleted, AddressOf indirmeislemitamamlandı
        '  Specify a progress notification handler.
        AddHandler client.DownloadProgressChanged, AddressOf indirmeislemidegisim
        'Yeni bir url tanımlayıp address degişkeni ile atıyoruz, address değerini ise Form2 nin load olayında GuncelDosya değişkenini kullanarak alıyoruz.
        Dim uri As Uri = New Uri(address)
        'DownloadFileAsync ise sunucumuzdaki dosyamızın yerini cekiyoruz ve indirildikten sonra kaydedilecek yerin yolunu belirliyoruz.
        client.DownloadFileAsync(uri, "C:\Users\Bukalemun\Desktop\arızatakip.rar")
    End Sub
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Form2 açıldığında DownLoadFileInBackground2 metotu çagırılıp indirme işlemi başlayacaktır. 
        DownLoadFileInBackground2(GuncelDosya)
        Label10.Text = "Programınızın yeni versiyonunu indirme işlemi başlamıştır. Lütfen indirme işleminin sağlıklı bir şekilde sonlanması için bekleyiniz..."
    End Sub
End Class

şeklinde yazmış oluyoruz, geliştirilebilir veya farklı sekilde kodlanabilir bu size kalmış...

Örnek çalışmayı buradan indirebilirsiniz...



 

 
 Dosyaları indirmek ve yorumları görebilmek için lütfen kullanici girişi yapınız !!!  
 
 
 


 

Son Güncelleme :  16/11/2017
  Design and Coding - Okan Düzgün 2011 - 2017 © Tüm Hakları Saklıdır.