C#’ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği

Merhaba,

Günümüzde bir yazılımın gelişim sürecindeki temel gaye, tüm plan ve algoritmaların gerçekleştirilmesi ve nihai unsur olarak ürünün elde edilmesinden ziyade ürünün inşasından sonraki gelişim sürecini de ilgilendiren durumları hesaba katmak ve yeni güncellemeleri son kullanıcılara bir şekilde duyurabilmek ve ulaştırabilmek için sonuç değil süreç odaklı bir teknik alt yapı geliştirebilmektir.

Yazılım geliştiriciler, üretilen bir yazılımın sonraki versiyonlarını kullanıcı kitlesine eriştirebilmek için birçok teknik ve yöntem geliştirmişlerdir. Tabi ki de bu teknik ve yöntemler; yetenekleri ve kapsamları açısından farklılık arz etmekte ve ihtiyaca dönük çok farklı imkan ve hizmetler sunabilmektedirler.

Bizler bu içeriğimizde bu teknik ve yöntemlerden amacımıza orta ölçekli hizmette bulunabilecek .NET mimarisi tarafından geliştirilmiş ClickOnce Deployment tekniğini inceliyor olacağız. ClickOnce Deployment, üretmiş olduğumuz yazılıma güncelleme desteği vermemizi sağlayabilen ve bunun yanında birazdan ele alacağımız birçok farklı nimeti bünyesinde barındıran bir deployment sistemidir.

ClickOnce Deployment Çalışma Mekanizması

Üretilen yazılımın yeni versiyonlarını kullanıcılara erişilebilir bir sunucu üzerinden ulaştırmaktadır. Yazımızın derinliklerinde de göreceğiniz üzere Visual Studio desteğiyle uygulayacağımız ClickOnce Deployment özelliği, projede olan her yeniliğe özel otomatik artan versiyon bilgisi oluşturmakta ve bu bilgi eşliğinde yazılımın son halini publish ederek ilgili sunucuya aktarmaktadır. Haliyle clienttaki uygulama, sunucudaki üst sürümü anlayabilmek için versiyon numarasını kontrol etmekte eğer yeni bir sürüm varsa kendini güncellemektedir.

ClickOnce Deployment İle Projeyi Publish Etme

Şimdi konuyu bir örnek proje üzerinden detaylıca ele alalım.

Güncelleme desteği vermek istediğiniz projeye “Solution Explorer” penceresinden sağ tıklayarak “Propertys” sekmesine tıklayınız.

C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği

Ardından karşımıza çıkan penceredeki sol menüden “Publish” sekmesine tıklayınız.
C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği

Şimdi tüm mevzu bu pencere üzerinde ceyran edeceği için yukarıdaki ekran görüntüsünü numaratik olarak parçalara bölmüş bulunmaktayım. Buyrun bu parçaları adım adım detaylandıralım.

  • 1. Bölüm
    Uygulamayı publish edeceğimiz dizini belirttiğimiz alandır.
  • 2. Bölüm
    Clientların yeni versiyon takibini yaptığı, varsa güncelleme işlemi için dosyalara ulaşacağı alanı belirtiyoruz. Yani yazılımın yayınlanacağı sunucuyu belirtiyoruz.
  • 3. Bölüm
    Bu özellik uygulamayı her açtığınızda arkaplanda öncelikle ilgili sunucuya erişip programı yükleyerek kullanma imkanı tanıyacaktır. Dolayısıyla bu işlem için internet gerektiğinden dolayı ilgili yazılımın sade ve sadece internet bağlantısı olduğu zamanlarda çalışabileceğini belirtmektedir.
  • 4. Bölüm
    Bu özellik ise uygulamayı bilgisayara yükleyecektir. Dolayısıyla yazılım kullanılmak istendiğinde internetten bağımsız hareket edilecek lakin yeni versiyonları kontrol etmek ve yüklemek istediğinizde ise internet bağlantısı gerekecektir.
  • 5. Bölüm
    Bu sekmede, uygulamayı bilgisayara kurarken hangi dosyaların yükleneceğini göstermekte ve ayarlama yapabilmemizi sağlamaktadır.
  • 6. Bölüm
    Bu sekmede ise yazılımı yüklerken ön koşul olarak gereken paketleri belirtebiliyor ve uygulama yüklenmeden önce kâh internet üzerinden kâh dosya yolunu belirtmiş olduğumuz kaynak dosyalar üzerinden gerekli yüklemeleri gerçekleştiriyoruz.
  • 7. Bölüm
    İşte bu seçenek tam da konumuzu ilgilendiren ayarları yani güncelleme ayarlarını bizlere sunmaktadır. Haliyle ilgili seçeneğin penceresini aşağıda ele alıp detaylı değerlendirmek konumuz açısından daha verimli olacaktır.C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği

    • “a” Bölümü
      Uygulamanın güncellemelerini otomatik olarak kontrol edip etmeyeceğini belirlemektedir. Seçilirse edecektir. Seçili değilse yazımızın devamında ele alacağımız gibi manuel olarak güncellemeleri kontrol edeceğiz.Ayriyetten bu seçeneği seçtiğiniz anda “b” ve “c” bölümleri aktifleşecektir.
    • “b” Bölümü
      Uygulama açıldıktan sonra güncellemeleri kontrol edip etmeyeceği belirlenmektedir.Bu seçenek seçildiği taktirde “d” ve “e” seçenekleri aktifleştirilecektir.
    • “c” Bölümü
      Uygulama açılırken güncellemelerin kontrol edilip edilmeyeceği belirlenmektedir.
    • “d” Bölümü
      Uygulama her çalıştığında güncelleştirmeleri kontrol edecektir.
    • “e” Bölümü
      Uygulama belirtilen aralıkta güncelleştirmeleri kontrol edecektir.
    • “f” Bölümü
      Yazılımın versiyon ayarlarını gerçekleştirebiliyoruz. Hatta güncellemelerin yüklenebilmesi için clienttaki uygulamanın minimum hangi versiyonda olması gerektiğini bile ayarlayabiliyoruz.
    • “g” Bölümü
      Eğer ki yazılımın güncelleştirmeleri farklı bir adresten(sunucudan) indirmesini istiyorsak ilgili adresi buraya belirtiyoruz. Bu alan boş kaldığı taktirde 2. bölümdeki alan varsayılan yazılım güncelleme adresi kabul edilmektedir.
  • 8. Bölüm
    Burada ise yazılımın publish seçeneklerini ve ayarlarını barındırmaktadır.
    C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği2Ayrıca sol menüdeki “Deployment” sekmesine tıklarsanız eğer;
    C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği2
    “Automatically generate deployment web page after every publish” sekmesini seçerseniz eğer “Deployment web page” kısmında belirtilen isimde bir versiyon bilgisi sunan html dosyası oluşturulacaktır.
  • 9. Bölüm
    Yazılımın versiyon seçeneklerini ayarladığımız alandır.
  • 10. Bölüm
    Bu seçenek seçiliyse eğer uygulamanın her publish olması durumunda 9. bölümdeki “Revision” alanı otomatik olarak 1 arttırılacaktır. Dolayısıyla bu işlemde her publish için otomatik versiyon bilgisi üretmiş olacaktır.

Evet… Bu bilgiler ışığında örnek projemizi, uygulama açılır açılmaz güncellemeleri kontrol edecek şekilde ve aşağıdaki ayarlarda publish edelim.

Burada kendime ait bir web sitesi üzerinden örneklendirme yapmaktayım.
C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği3

Publish yapar yapmaz otomatik tarayıcıda karşımızdaki web sayfası açılmaktadır.

Yazılımı yükledikten sonra, kapatıp tekrardan açarsanız eğer aşağıdaki gibi başlangıçta sürüm kontrolü yaptığını göreceksiniz.
C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği4

Ve yaptığınız herhangi bir yenilik doğrultusunda yazılımı tekrardan publish ederseniz aşağıdaki gibi ilgili güncelleme programın ilk çalıştırılmasında fark edilecek ve kullanıcı onaylı başlatılacaktır.
C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği4

C#'ta ClickOnce Deployment İle Uygulamaya Güncelleme Desteği4

Son olarak otomatik tüm güncelleştirme işlevlerini durdurup kullanıcı bazlı kontrol yapmak istiyorsanız eğer biraz koda bulaşmanız gerekecektir. Dolayısıyla aşağıdaki kod bloğu manuel olarak güncelleştirmeleri kontrol etmenizi sağlayacak yapıyı sizlere sunmaktadır.

            try
            {
                //ApplicationDeployment, güncelleştirme bilgilerine erişmemizi sağlayacak olan bir sınıftır.
                ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
                //CheckForDetailedUpdate metodu ile güncelleme var mı? yok mu? kontrol ediyoruz.
                UpdateCheckInfo info = ad.CheckForDetailedUpdate();
                if (info.UpdateAvailable)
                {
                    if (DialogResult.Yes == MessageBox.Show($@"Şu anki versiyonunuz: {ad.CurrentVersion.ToString()} Yeni versiyon: {info.AvailableVersion.ToString()} kullanılabilir durumda. Yüklemek istiyor musunuz?",
                        "Bilgi",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Information,
                        MessageBoxDefaultButton.Button1))
                    {
                        if (ad.Update())
                        {
                            MessageBox.Show("Program Başarıyla Güncellendi. Şimdi yeniden Başlatılacak.");
                            Application.Restart();
                        }
                        else
                            MessageBox.Show("Güncelleme Sırasında Hata Oluştu");
                    }
                }
                else
                    MessageBox.Show("Güncelleme bulunmamaktadır.");
            }
            catch
            {
                MessageBox.Show("Sunucuyla bağlantı sağlanamadı.");
            }

Bu komutlar eşliğinde programınızın yeni versiyonlarını kontrol edebilir, varsa güncelleyebilirsiniz.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

5 Cevaplar

  1. Baris dedi ki:

    Sunucu adresini nerde belirtmemiz gerekiyor ? Birde tüm güncellemeleri otomatik yapmasını istiyorsak?

    Verileri AppData altına alıyor bir klasör belirtsek?

    • Gençay dedi ki:

      Birinci sorunun cevabı için;
      null
      İkinci sorunun cevabı için;

      try
      {
          //ApplicationDeployment, güncelleştirme bilgilerine erişmemizi sağlayacak olan bir sınıftır.
          ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
          //CheckForDetailedUpdate metodu ile güncelleme var mı? yok mu? kontrol ediyoruz.
          UpdateCheckInfo info = ad.CheckForDetailedUpdate();
          if (info.UpdateAvailable)
          {
                  if (ad.Update())
                  {
                      MessageBox.Show("Program Başarıyla Güncellendi. Şimdi yeniden Başlatılacak.");
                      Application.Restart();
                  }
                  else
                      MessageBox.Show("Güncelleme Sırasında Hata Oluştu");
          }
          else
              MessageBox.Show("Güncelleme bulunmamaktadır.");
      }
      catch
      {
          MessageBox.Show("Sunucuyla bağlantı sağlanamadı.");
      }
      

      Makalenin en sonundaki kod bloğuna göz atarsan eğer if kontrolü kaldırılmıştır. Netice olarak yukarıdaki (gibi) bir algoritma işini görecektir.

      Son yazdığında ise istediğin müdahalede bulunabilirsin. Nihayetinde şimdi öngöremediğimiz olası patlamaları süreçte kontrol etmen gerekecek.

      Kolay gelsin.

  2. Ömer dedi ki:

    komutu yapmaya callstım ama otomatık guncelleme almadı bır turlu :S

    try
    {
        //ApplicationDeployment, güncelleştirme bilgilerine erişmemizi sağlayacak olan bir sınıftır.
        ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
        //CheckForDetailedUpdate metodu ile güncelleme var mı? yok mu? kontrol ediyoruz.
        UpdateCheckInfo info = ad.CheckForDetailedUpdate();
        if (info.UpdateAvailable)
        {
            if (DialogResult.Yes == MessageBox.Show($@"Şu anki versiyonunuz: {ad.CurrentVersion.ToString()} Yeni versiyon: {info.AvailableVersion.ToString()} kullanılabilir durumda. Yüklemek istiyor musunuz?",
                "Bilgi",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Information,
                MessageBoxDefaultButton.Button1))
            {
                if (ad.Update())
                {
                    MessageBox.Show("Program Başarıyla Güncellendi. Şimdi yeniden Başlatılacak.");
                    Application.Restart();
                }
                else
                    MessageBox.Show("Güncelleme Sırasında Hata Oluştu");
            }
        }
        else
            MessageBox.Show("Güncelleme bulunmamaktadır.");
    }
    catch
    {
        MessageBox.Show("Sunucuyla bağlantı sağlanamadı.");
    }
    
  3. Altan dedi ki:

    Kiralık sunucumda ftp:// siteyi kurdum ve burada bir proglemim yok ancak. Http:// kısmında proglem yaşıyorum. Çözüm için yardımcı olabilir misiniz ? “Clientların yeni versiyon takibini yaptığı, varsa güncelleme işlemi için dosyalara ulaşacağı alanı belirtiyoruz. Yani yazılımın yayınlanacağı sunucuyu belirtiyoruz.” demişsiniz anladığım kadarıyla burada sadece programın “Setup”u oluyor.

Bir cevap yazın

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

*

Copy Protected by Chetan's WP-Copyprotect.