C# ile Program Güncellemesi Yapmak

Merhaba arkadaşlar, bu dersimizde C# ile program güncellemesi yapacağız. Bu konuyla ilgili pek türkçe kaynak olmadığı için böyle bir makale yazmaya karar verdim. Aslında bu konunun güncellenmiş hali. Yani eski kodlamayı kaldırıp yeni kodları ekledim konuya. Yeni kodlama biraz daha basit ve kod fazlalığı yok. Eğer büyük otomasyon programlarınızda yada büyük projelerinizde uzaktan güncelleme yapmak istiyorsanız bu kodların çok işinize yarayacağından eminim. Dersin yararlı olması dileğiyle… 🙂

İlk önce program ile ilgili resimleri paylaşmak istiyorum. Form1’de güncelleme kontrol ediyor. Eğer yeni güncelleme var ise bize uyarı verip güncellensin mi diye soruyor. Şunu belirtim en aşağıda proje dosyasını vereceğim ama Form1’de hiçbir label, textbox vs. yok. Sadece kodlar ile güncellemeyi kontrol ediyoruz.
Bu kısımda ise dosyayı indiriyoruz. İlerlemesini label’de ve progressBar’da gösteriyoruz.

Güncelleme işlemini yapmak kontrol ettirmemiz gerekiyor. Bunun içinde sunucumuzda tutacağımız bir adet php dosyasına ihtiyacımız var. C# ile yazacağımız proje bu dosyaya erişip kontrol ediyor ve dönen veri ” UPDATE ” ise güncelleme işlemi başlıyor. Php dosyamızın kodları ;

<?
$versioncode = "2"; //Güncel version kodumuz. Eğer güncelleme yapacaksak bu değeri yükseltmemiz gerek. Zaten csharp projemizdeki versionkodu 1 olduğu için güncelleme başlayacaktır.
if($_GET["v"])
{
 $currentversion = $_GET["v"];
 if($versioncode > $currentversion){
    echo "UPDATE"; //Dönen veri update ise güncelleme başlayacak.
  }
   else{
    echo "OK"; //Dönen veri OK ise güncelleme başlamayacak.
   }
}
?>

Php dosyamızı sunucumuza attıktan sonra geldik projemize. Program.cs’de programımızın version numarasını tanımlıyoruz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GuncellemeYapmak
{
    static class Program
    {
        public static string versionCode = "1"; //Version numaramız
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Form1.cs kodlarımız ;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// Aşağıdaki iki adet referansı projemize ekliyoruz.
using System.Net; 
using System.IO;

namespace GuncellemeYapmak
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            UpdateKontrol(); //Load olayında UpdateKontrol'a gidiyoruz.
        }

        private void UpdateKontrol()
        {
            if (CheckUpdate())
            {
                DialogResult dialog = MessageBox.Show("Yeni güncellemeler var. \n\rŞimdi Yüklemek istermisiniz?", "Güncelleme Bulundu",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
                if (dialog == DialogResult.Yes)
                {
                    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(updateMe));
                    t.Start();
                    this.Close();
                }
            }
        }

        public static void updateMe()
        {
            Application.Run(new Form2());
        }


        private Boolean CheckUpdate()
        {
            Boolean ret;
            try
            {
                WebClient client = new WebClient();
                Stream stream = client.OpenRead("http://domain.com/app/check.php?v=" + Program.versionCode); //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.
                StreamReader reader = new StreamReader(stream);
                String content = reader.ReadToEnd();
                if (content == "UPDATE") //Dönen veriyi kontrol ediyor. Dönen veri UPDATE ise güncelleme aşamasına geçiyor.
                {
                    ret = true;
                }
                else
                {
                    ret = false;
                }
            }
            catch
            {
                ret = false;
            }
            return ret;
        }
    }
}

Form2.cs kodlarımız ;
Form2’de projemize bir adet timer ekliyoruz.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// Aşağıdaki referansı ekliyoruz.
using System.Net;

namespace GuncellemeYapmak
{
    public partial class Form2 : Form
    {
        private string destPath = Application.StartupPath + "\\dosya.exe"; //güncellenecek dosyamızın adı
        private string GuncelDosya = "http://domain.com/app/dosya.exe"; //Sunucudan çekeceğimiz dosyanın adresi
        private string DosyaAdi; 
        public Form2()
        {
            InitializeComponent();
        }


        private void Form2_Load(object sender, EventArgs e)
        {
            timer1.Start(); //Load eventinde timeri aktif ediyoruz.
        }

        private void timer1_Tick(object sender, EventArgs e) //Timer tick kısmı
        {
            timer1.Enabled = false; //Timerin bir kere çalışmasını istediğimiz için timeri pasif yapıyoruz.
            WebClient webClient = new WebClient(); //Webclient tanımlıyoruz.
            webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); //Webclient içinde webClient.DownloadFileCompleted olayı tanımlıyoruz. Yani dosya yüklenmesi bitince bu kısım tetiklenecek.
            webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);//Webclient içinde webClient.DownloadProgressChanged olayı tanımlıyoruz. Dosyanın her bir kilobyte ı indiğinde bu olay tetiklenecek.
            webClient.DownloadFileAsync(new Uri(GuncelDosya), destPath); //En yukarıda tanımladıgımız GuncelDosya değişkeninde ki linki indirmeye baş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. 
            string DosyaAdiUrlAdresi = GuncelDosya;
            int karaktersayisi = DosyaAdiUrlAdresi.LastIndexOf('/');
            DosyaAdi = DosyaAdiUrlAdresi.Remove(0, karaktersayisi + 1);
        }

        private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) //Webclient kısmında tanımladığımız olay tetiklendiğinde bu kısım çalışacak.
        {
            progressBar1.Value = e.ProgressPercentage; //progressbarın ilerlemesini sağlıyoruz.
            ilerlemedurum_label.Text = DosyaAdi + " (%" + e.ProgressPercentage.ToString() + ")"; //Yüklenen kısmı yüzde olarak gösteriyoruz.
        }

        private void Completed(object sender, AsyncCompletedEventArgs e) //Webclient kısmında tanımladığımız olay tetiklendiğinde bu kısım çalışacak.
        {
            ilerlemedurum_label.Text = "Tamamlandı"; // Yükleme bitti
        }
    }
}
C#
C# ile Program Güncellemesi Yapmak
İndirilme : 1658 | Dosya Tipi : rar

50 yorum

  1. Berk Yanıtla

    Atakan hocam merhaba,
    Ben bu yaptığınız şeyi denedim ancak ftp’ye attığım exe dosyasını indirirdikten sonra açtığımda ntdw 16 bit gibi bir hata verdi. Bu sorunu nasıl çözebilirim gerçekten çok uzun zamandır uğpraşıyorum

  2. berat berk Yanıtla

    anlamadaıgım kısım güncel dosya nasıl olcak o hadi yaptık hangi dosyayı koyacağız hangisini alcagız

  3. Serhan Yanıtla

    c# program güncelleme (ağda Update) nasıl yapılır acaba kaç gündür çözemedim sorunu aynı ağ üzerinde çalışan sql server bağlantısı olan bir programımım var bir bilgisayar da sql server kurulu diğer pclerde exe dosyası mevcut programım sorunsuz çalışıyor ama ağda nasıl güncellenir bulamadım bi türlü yardım edebilirmisiniz.

  4. Azat ADSAN Yanıtla

    Merhaba

    bu güncellemede sadece exe güncelliyor dosya kontrol etsin istiyorum crc32 ile kontrol et eğer değişmiş ise güncelleme yap

    • Atakan Yasin Uludağ YazarYanıtla

      Zaten bu makale fikir vermesi amacı ile yazıldı. Tüm dosyaları kontrol etmek istiyorsanız klasörde bulunan dosyaları döngüye alıp uzak sunucudaki klasör ile tek tek kontrol etmeniz gerek. Bununla ilgili makale yazacağım ileri ki dönemlerde.

  5. mikail baran Yanıtla

    merhabalar ben güncel bir soru soracagım veritabanımızda telefon numaraları ad soyad vs gibi bölümler var biz tekstil işi yapan işçilerin telefon numaranın önüne 1 eklicez yani normalde diyelimki numrası 2012212 …benim yapmak istediğim 12012212 nasıl yapabilrim yardımcı olursanız sevinrım

  6. fahrettin Yanıtla

    ben bu kodları kullandım herhangi bir hatayla karşılaşmadım. Ancak Uygulama çalıştığı için üzerine yazmıyor. Yani örneğin ktp.exe adlı uygulamayı ktup.exe gibi farklı bir adla bilgisayara indirdiğimde indiriyor ktp.exe olarak indirmeye çalışdığımda indirmiyor. Aynı isimle uygulama çalıştığı için olmuyor. studio 2013 kullanıyorum.

    • Atakan Yasin Uludağ YazarYanıtla

      Ben projelerimde şu mantığı kullanmıştım ; yeni proje açıp güncelleme kodlarını yeni projeye ekliyordum. Diğer normal projeme ise ilk formun load kısmında güncelleme kontrol’ü yapıyordum. Eğer güncelleme var ise o projeyi kapatıp , yeni açtığım projeyi açıyordum. Sizde böyle bir mantık kullanabilirsiniz.

    • fahrettin Yanıtla

      bende sizin gibi düşünmüştüm. Bunun farklı bir yolu var mı diye sormuştum. Cevabınız için çok teşekkür ederim.

  7. Emre Yanıtla

    Merhabalar Anlatım İçin Teşekkürler Şimdi Aynı Sistemi Yaptım Ama İndiridğim Dosya ile indiren dosya aynı ben indirilen dosyayı diğeri ile değiştirmek istiyorum nasıl yapabilirim Şimdiden teşekkürler iyi günler dilerim

  8. Ali Yanıtla

    Merhabalar.. Güncellemek istediğim dosya masaüsütünde duruyor. Onun sadece adını yazdım. Form2 kısmına. Daha sonra dosyanın indirme linkini de ekliyorum ama RAR olarak yükledim dosyayı tabi. İndirme işlemi bir türlü gerçekleşmiyor. Sebebi nedir?

    • Atakan Yasin Uludağ YazarYanıtla

      İndirme işlemi başlamıyorsa sunucudan çektiğiniz dosyada veya linkte bir sıkıntı var demektir. Kodlarınızda ki try catch bloklarını silip deneyin. Böylece hangi kodda hata olduğunu görmüş olursunuz ve ona göre işlem yapabilirsiniz.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir