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...