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 Tarihi :  2015-12-20 19:41:23

Bir program yaptigimizi düsünelim sonrasinda ise bu programa yeni özellikler ekledikçe versiyon numarasinin degisip programin güncel versiyonun oldugunu kullanicilara bildirip ve programin bu güncel versiyonu indirmesini saglayalim.

ilk olarak sunucudan programin güncel versiyonun olup olmadigini kontrol etmemiz gerek ve bunun için check.aspx dosyasi olusturup, check.aspx sin load kismina asagidaki kodlarimizi yaziyoruz.

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
        ' Programimizin 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

yukaridaki kodlarimizda yaptiklarimiza bakarsak eger versiyoncode adinda bir string degiskeni tanimlayarak buraya programin yeni versiyonu belirliyoruz.

currentversiyon ise program tarafindan check.aspx dosyasina bir requeststring ile programin kendi versiyonunu gönderecek ve request.querystring ile programin gönderdigi versiyonu currentversiyon degiskenine atayacagiz. Sonrasinda ise eger yeni versiyon programin gönderdigi versiyondan büyükse ise sayfaya update yazdiracagiz ve sonrasinda program ile update yazisini cekecegiz.

Porgram tarafindan cekilen görüntüsüne bakarsak eger, programa bir tane webbrowser ekleyip bakiyoruz.

Kodlarimiza 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 bastigimizda hostumuzdaki check.aspx sayfamiza v degiskenine 1 degerini atayip gönderiyor ve check.aspx sayfamizda biz program versiyon kodumuzu 2 olarak belirttigimiz için sayfaya update yaziyor ve bizde programla update yazisini cekiyoruz.

Check id=2 butonuna bastigimizda ise yine ayni islemler gerçeklesip program güncel yazisini cekiyor ve bu durumda hiç bir islem yapmiyor. check.aspx sayfamizi ayarladiktan sonra gelelim programimiza;

Programimiz çalistiginda ilk olarak Form1 açiliyor ve bize asagidaki uyariyi veriyor ;

kodlarimiz ise ;

' Asagidaki referanlari 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 kismini kendinize göre düzenlemeniz gerek. Artik sunucunuzun ip numarasini yada varsa domain adresinizi yazip php dosyasini nereye attiysaniz onun yolunu bu kisma yazmaniz gerek. check.php?v= kismindan sonra yazan kod ise Program.csde tanimladigimiz program versionunu çekmeye yariyor.
            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 asamasina 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 & "Simdi 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 dedigimiz taktirde, Form2 açilip güncel versiyonu indirmeye basliyoruz;

Indirme islemi sonrasinda ise ;

seklinde program uyari vermekte. Form2 kodlarina bakacak olursak ;

Imports System.Net
Imports System.IO
Imports System.ComponentModel
Public Class Form2
    Private destPath As String = Application.StartupPath + "\dosya.exe"
    ' Indirilecek dosyamizin 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 kisminda tanimladigimiz olay tetiklendiginde bu kisim çalisacak.
        ProgressBar1.Value = e.ProgressPercentage ' indirme esnasindaki degisiklileri progressbar1 value degerine atiyoruz.
        Label1.Text = e.TotalBytesToReceive ' Dosyamizin toplam boyunu belirtiyoruz.
        Label2.Text = e.BytesReceived ' Dosyamizin indirilen byte degerini görüyoruz.
        Label3.Text = e.ProgressPercentage ' Dosyamizin indirilen yüzde kismini görüntülüyoruz.
        Label4.Text = DosyaAdi ' Indirilen dosyamizin adini görüntülüyoruz.

        'Bu kisimda ise indirecegimiz dosyanin sadece adini ve uzantisini çekiyoruz. Yani GuncelDosya degiskeninde ki linkin gereksiz kisimlarini silip sadece dosya adini ve uzantisini aliyoruz. 
        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 indirmeislemitamamlandi(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
        ' Indirme islemi tamamlandiktan sonra uyari mesajimizi veriyoruz.
        MessageBox.Show("Indirme islemi basariyla gerçeklesti !!!", "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 indirmeislemitamamlandi
        '  Specify a progress notification handler.
        AddHandler client.DownloadProgressChanged, AddressOf indirmeislemidegisim
        'Yeni bir url tanimlayip address degiskeni ile atiyoruz, address degerini ise Form2 nin load olayinda GuncelDosya degiskenini kullanarak aliyoruz.
        Dim uri As Uri = New Uri(address)
        'DownloadFileAsync ise sunucumuzdaki dosyamizin yerini cekiyoruz ve indirildikten sonra kaydedilecek yerin yolunu belirliyoruz.
        client.DownloadFileAsync(uri, "C:\Users\Bukalemun\Desktop\arizatakip.rar")
    End Sub
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Form2 açildiginda DownLoadFileInBackground2 metotu çagirilip indirme islemi baslayacaktir. 
        DownLoadFileInBackground2(GuncelDosya)
        Label10.Text = "Programinizin yeni versiyonunu indirme islemi baslamistir. Lütfen indirme isleminin saglikli bir sekilde sonlanmasi için bekleyiniz..."
    End Sub
End Class

seklinde yazmis oluyoruz, gelistirilebilir veya farkli sekilde kodlanabilir bu size kalmis...



 

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


 

 Son Güncelleme :  06.05.2018
  Design and Coding - Okan Düzgün 2011 - 2018 © Tüm Hakları Saklıdır.