C# Profesyonel Seriler #1 [Güncelleme Kontrolü]

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Banlı Üye
Katılım
7 Nis 2020
Mesajlar
116
Çözümler
3
Tepki puanı
18
Yaş
30
6 HİZMET YILI
Öncelikle herkese selamlar,
bu sistem için ihtiyacınız olacak tek şey bir HOSTING hizmeti olacaktır.

Uygulamanızın güncellemesinden kullanıcıları haberdar etmek için yapmamız gerekenler:
1. İnternet bağlantısını kontrol etmek
2. Hosting üzerindeki XML dosyasından son sürümün ne olduğuna bakmak
3. Son sürüm bizim uygulamamızda ki değerden büyükse güncelleme diyaloğu göstermek
4. Kullanıcıya zorla güncellemeyi indirtmek yada seçim yapmasını sağlamak (ki etik olan bu)

Önce internet bağlantısının olup olmadığını kontrol edecek bir kod bloğu yazalım:
C#:
public static bool BaglantiKontrolu(){
     try
     {        //WebClient kütüphanesini kullanarak dosya boyutu çok küçük bir
             //sayfa ile kontrolümüzü yapıyoruz buradan dönen değer boolean olacaktır.
         using (var client = new WebClient())
             using (client.OpenRead("http://google.com/generate_204"))
             return true;
     }
     catch
     {
         return false;
     }
}

Şimdi Hostingimize yükleyeceğimiz XML dosyasını yazalım:
Kod:
[COLOR=rgb(251, 160, 38)]Dipnot: Her yeni güncellemede version değişkenini manuel olarak değiştirmelisiniz(Hosting hizmeti veren sitenin dosya yöneticisinde metin editörü vardır oradan düzenleyebilirsiniz). İlerideki derslerde talep olursa otomatik nasıl yapılır anlatabilirim.[/COLOR]

2. adıma geçebiliriz artık sırada [COLOR=rgb(251, 160, 38)]XML[/COLOR] dosyamızı Parse edecek fonksiyonumuz var:
[CODE=csharp]// ######################################################################## //
// #######################  using System.Xml.Linq;  ####################### //
// ######################################################################## //
public void GuncellemeKontrolu() {
     XDocument xDoc = XDocument.Load("https://DOMAIN.COM/updates/update.xml");
    // Dosyamızı alıyoruz
 
     var Guncellemeler = xDoc.Element("Updates").Descendants("Update").Where(d => int.Parse(d.Element("Version").Value.ToString().Replace(".", "")) > int.Parse(Properties.Settings.Default.Version.ToString().Replace(".", ""))).Select(d => d);
     //Uygulamadaki Versiyon değeri ile karşılaştırmak için sırasıyla dışarıdan içeri giriyoruz
    //Updates > Update > Version değerinin noktasız halini (örn: 12.2.4 ise 1224) int değerine çeviriyoruz
    //Aynı işlemi uygulamayı build etmeden önce yazdığımız değere uyguluyoruz (örn: kullanıcımızda şuan 12.2.2 mevcut)
    // 1224 > 1222 olduğu için güncellemeler elemanının sayısı 1 olacak ve aşağıdaki if döngüsüne girmeyecek
    if (Guncellemeler.Count() == 0)
     {
         MessageBox.Show("Yazılımınız şuan için güncel!", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 
     foreach (XElement elem in Guncellemeler)
     {
         if (MessageBox.Show("Güncelleme mevcut! \nŞuan kullandığınız sürüm:" + Properties.Settings.Default.Version + "\nYeni sürüm:" + elem.Element("Version").Value + "\nŞimdi indirmek ister misiniz?", "Güncelleme Mevcut", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
         {
             // Buraya kadar geldik güncelleme işlemini yaptırmamız lazım
             // fakat aynı uygulamadan bunu yapmak mümkün değil o yüzden güncellemede kullanılacak bilgileri dışarı aktarıyoruz.
             string path = @"update.txt";
             if (File.Exists(path))
             {
                 File.Delete(path);              
             }
             string updateLink = "https://Domain.com/updates/" + elem.Element("Path").Value;
             File.WriteAllText(path, updateLink);
             Process.Start(Application.StartupPath + "\\update.exe");
             Environment.Exit(0);


         }

     }
}

Çok güzel şimdiye kadar;
Kullanıcımızın internet bağlantısı var mı yok mu onu öğrendik
Xml dosyamızı Hostinge upload ettik, sonrasında kontrol etmeye yarayacak fonksiyonu yazdık
Diyaloğumuzu gösterdik
Şimdi güncellememizi indirecek ufak bir konsol uygulaması yazmak kaldı

Değiştirmeniz gereken yerler var bunu unutmadan işlemlerinizi yapın:
C#:
using System;
using System.Diagnostics;
using System.IO;
using System.Net;

namespace UpdateMarket //*****************BURASI
{
    class Program
    {
        static void Main(string[] args)
        {
            string downloadURL="";
            string path = @"update.txt";
            if (File.Exists(path))
            {
                Console.WriteLine("Kontrol yapılıyor...");
                downloadURL = File.ReadAllText(path);
            }
            else {
                Environment.Exit(0);
            }
            var path2 = new Uri(
             System.IO.Path.GetDirectoryName(
                 System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
             ).LocalPath;

            Console.WriteLine("İndirme Başlatılıyor...");
            using (WebClient wc = new WebClient())
            {
                wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.33 Safari/537.36");
                wc.DownloadFile(downloadURL, path2 + "\\Uygulamam2.exe"); //*****BURASI

            }
            Console.WriteLine("Dosya indirildi kurulum için hazırlanıyor...");
            foreach (var process in Process.GetProcessesByName("Uygulamam")) //******BURASI
            {
                process.Kill();
            }
            //********VE BURADAKİ UYGULAMAM YAZAN YERLERİ KENDİ PROCESSNAME'İNİZ İLE DEĞİŞTİRİN
            File.Move(path2 + "\\Uygulamam.exe", path2 + "\\UygulamamOld.exe");
            // Şuanki versiyonu old olarak değiştiriyoruz
            System.Threading.Thread.Sleep(1000);
            File.Move(path2 + "\\Uygulamam2.exe", path2 + "\\Uygulamam.exe");
            // Yeni versiyonu eskisinin yerine koyuyoruz ki kısayollar varsa bozulmasın
            System.Threading.Thread.Sleep(1000);
            Process.Start(path2 + "\\Uygulamam.exe");
            // Güncel uygulamayı çalıştırıyoruz
            System.Threading.Thread.Sleep(1000);
        }
    }
}

Bu konsol uygulamasını build ettikten sonra exe dosyasını kendi projeniz ile aynı konuma koymanız gerekmektedir.

Şimdi ince ayarlarımızı görseller ile anlatacağım çoğunuz belki biliyordur ama kullandığını pek zannetmiyorum

Version değerini uygulamayı her güncellemek istediğimizde arttıracak şekilde yazmamız lazım
DİKKAT: 1.2.0 versiyonu 1.3 versiyonundan daha büyük olacaktır bunun için 1.3.0 yapmalısınız
yada bugünü örnek alırsak 1.4.08 gibi tarih bazlı güncellemeler de yapabilirsiniz


Ppyz9U.png


Aşağıdaki görselde ise uygulamamızın processName i yazıyor yani şu kodu çalıştırdığımızda uygulamamızın kapanmasına yarayacak

C#:
foreach (var process in Process.GetProcessesByName("Uygulamam")){
    process.Kill();
}

S4mD3L.png


Son olarak kafa karışıklığı olmasın diye Hostingin metin editörünü göstermek istiyorum. Yeni versiyon yükleyeceğiniz zaman eski versiyonları silmezseniz sizin için daha iyi olur yeni sürümde hata olması durumunda sürüm düşürebilirsiniz

hQFgHv.png



Merak ettiğiniz, anlamadığınız yada eksik anlattığım bir yer olursa mutlaka aşağıda bildirin.
İyi karantinalar.
 
Son düzenleme:
Seçkin Üye
Katılım
7 Eyl 2017
Mesajlar
303
Çözümler
1
Tepki puanı
11
Ödüller
7
Yaş
41
8 HİZMET YILI
Emeğine sağlık iyi çalışmalar hocam
 
Onaylı Üye
Katılım
6 Nis 2020
Mesajlar
108
Tepki puanı
13
6 HİZMET YILI
dostum benim bildiğim bunu c# kendiside yapıyor otomatik olarak, kod yazmaya gerek duymadan
fakat yanılıyor olabilirim yıllar önce bu olayı yapmıştım
fakat yinede kaydettim ileride işime yarayabilir bir hata ile karşılaşırsam :D
 
Onaylı Üye
Katılım
25 Haz 2019
Mesajlar
80
Tepki puanı
5
Ödüller
4
Yaş
28
6 HİZMET YILI
hocam uğraşmıssınız baya elinize sağlık teşekkürler
 
Seçkin Üye
Katılım
15 Mar 2016
Mesajlar
310
Çözümler
2
Tepki puanı
7
Ödüller
7
Yaş
24
10 HİZMET YILI
her güncellemede version değişicekmiyiz
 
Seçkin Üye
Katılım
6 Eki 2018
Mesajlar
306
Çözümler
1
Tepki puanı
76
Ödüller
7
7 HİZMET YILI
eline sağlık dostum harika anlatmışsın
 
Onaylı Üye
Katılım
15 Mar 2019
Mesajlar
52
Tepki puanı
0
Ödüller
5
Yaş
48
7 HİZMET YILI
paylaşım için sağol. emeğine sağlık
 
Onaylı Üye
Katılım
22 Ocak 2020
Mesajlar
93
Çözümler
1
Tepki puanı
3
Ödüller
3
Yaş
34
6 HİZMET YILI
teşekkür ederim profesör c güzel

1587923322699.png
 
Onaylı Üye
Katılım
1 Haz 2018
Mesajlar
51
Tepki puanı
4
Yaş
35
8 HİZMET YILI
kontrol işlemi gerçekleşmedi diyor ama ?
 
Süper Üye
Katılım
3 Eyl 2018
Mesajlar
602
Çözümler
2
Tepki puanı
42
Yaş
36
7 HİZMET YILI
teşekkürler
Post automatically merged:

Emeğine sağlık iyi çalışmalar hocam :D :D :D
 
Uzman Üye
Katılım
17 Nis 2020
Mesajlar
284
Çözümler
2
Tepki puanı
21
Yaş
36
6 HİZMET YILI
Bende DropBox api ile yapmıştım aynı yöntemi..Youtube da var
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst