C# otomatik güncelleme yapımı

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Seçkin Üye
Katılım
22 Kas 2020
Mesajlar
315
Çözümler
1
Tepki puanı
95
Ödüller
3
5 HİZMET YILI
Merhaba, forumda tonla otomatik güncelleme nasıl yapılır gibi sorular gördüm. Kimse artık bu soruyu bir daha sormasın diye bu soruya noktayı bu postta nokta koyuyorum :) yapabildiğim en basit anlatımı yapıp, en alttada inceleme amacıyla projenin linkini paylaşacağım.

Ne yapacağız?

* Uygulamanın kendi kendine indirip, kendini güncellemesine olanak tanıcağız. Kullanıcı "Güncelle" butonuna basınca bir kaç dakika içinde her şey bitmiş olup, yeni sürüm karşısına gelicektir :)

Gerekenler

* Orta/Düşük seviye C# bilgisi (sıfır bilgi ile bunu yapamazsınız)
* Github gists açmak için github hesabı



Başlayalım

Evet ben her şeyi anlatırken arkanıza yaslanıp konuyu okuyabilirsiniz. Aşama aşama anlatıcağım. Ben bunu VS 2022, C# dili ve windows forms aracılığı ile yapıcağım konsol, dil, vs sürümü farketmez. Mantığı hemen hemen aynıdır.

1 - Github Gists / CDN

> Önce indirme linkini alıcağız. Bunun için tonla CDN kullanabilirsiniz. Veya exe dosyasını discordda herhangi bir yere atıp linkini öyle alabilirsiniz.

1638652181595.png


> İyi tamam da, uygulama yeni sürüm bilgilerini nerden çekicek? bunun için github gist kullanıp raw linkini alacağız.
Bağlantıları görmek için lütfen Giriş Yap
github gist'e ulaşıp yeni bir gists açmamız gerekiyor. Uygulamanın yeni sürümü öğrenmesi ve yeni sürüm linkini almasını seperator aracılığıyla yapacağız. En başta yeni sürümün adı (örneğin yeni sürüm v2 ise 2 v3 ise 3 şeklinde girebilirsiniz. 2.3,2.4 şeklinde girmeyin) daha sonra | ekleyip yeni sürümü koyun. Aşağıdaki gibi olabilir.
Sürüm | Link

1638653836197.png


Burda gist secret olsun ki kimse göremesin. Create secret gist diyip gistimizi oluşturalım. Aşağıdaki gibi raw linkini alalım.

1638652317598.png


Dikkat - Github gist raw linki her güncellediğinizde değişmektedir. Sabit kalmasını istiyorsanız
Bağlantıları görmek için lütfen Giriş Yap
anlatıldığı gibi adımları uygulamanız gerekir.


2 - Uygulama oluşturma

Şimdi de uygulamamızı açalım, "Güncelleme denetle" gibi bir buton ekleyelim.

1638652721912.png


Aşağıdaki güncelleme denetle butonu, uygulamanın şu anki sürümünü dinamik olarak alıp yazdığımız sürüm ile denetleyecektir.



C#:
private bool GuncellemeVarmi()
        {

            const string GuncellemeLinki = ""; // raw link buraya
            int YeniSürüm; // uygulamanın şu anki sürümü için kullanılacak değişken.

            try
            {

                /*

                Aşağıdaki şey, WebClient ile raw linkinden yazdığımız yazıyı çekip ilk baştaki sayıyı sürüm
                olarak Int.Parse methodu ile parseleyip sürüm olarak alıcaktır.
                Not: Int.Parse - Convert.ToInt32 ile aynıdır.
                */

                YeniSürüm = int.Parse(new WebClient().DownloadString(GuncellemeLinki)[0].ToString());

            }
            catch (Exception e)
            {
                MessageBox.Show($"Yeni sürüm integer olarak girilmemiş! lütfen 2,3 şeklinde girin. - {e.Message}", "Ups!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }


            /*

            Bu, uygulamanın şu anki sürümünü çekicektir. 1.0.0.2 gibi bir şey dönebilir, ama biz baştaki o 1'i alıcağız.

            */

            int UygulamaSürümü = int.Parse(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()[0].ToString());

            return UygulamaSürümü < YeniSürüm; // Uygulamanın sürümü, yeni sürümden küçük. Güncelleme mevcut.


        }

Uygulamanın şu anki sürümünü nerden çekiyor peki? Proje Ayarları > Proje Özellikleri > Bütünleştirilmiş Kod Bilgileri > Derleme Sürümü programın şu anki sürümünü çekmek için kullanılacak olan etmendir. Yukardaki method sürüm bilgisini burdan çeker. Her bir güncelleme yaptığınızda baştaki sayıyı birer birer arttırmanız gerekir. Örnek 1 sürümünü güncellediyseniz diğer sürüm 2 olmalı.

1638653989842.png


Çalıştırdığınıp GuncellemeVarmi() butonu ile güncellemeyi denetlediğimizde sürüm bilgisi burdan çekilip, raw linkindeki metindeki sürümden düşük olduğunu veya olmadığını göstericek. Diyelim güncelleme var, bu method sihirli bir şekilde her şeyi halledicek.

Aşağıdaki method programın yeni sürüm linkini alıp, şu anki programın olduğu yere yerleştirip eski sürümü silip yeni sürümü açıcaktır.


C#:
private void SonSurumeGuncelle(string DosyaIsmi = "YeniSurum")
        {

            const string Raw = ""; // raw link buraya
            WebClient wc = new WebClient();
            string dosya_ismi = DosyaIsmi.EndsWith(".exe") ? DosyaIsmi : DosyaIsmi += ".exe"; // .exe yoksa ekle
            string yeni_surum_link = wc.DownloadString(Raw).Split('|').Last(); // seperator ile böl ve '|' charından sonraki metni al.

            try
            {
                wc.DownloadFile(yeni_surum_link, DosyaIsmi);
            }
            catch (Exception e)
            {
                MessageBox.Show($"Yeni sürüm indirilirken bir hata oluştu. - {e.Message}", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            /*
           
            Yeni sürüm burda indirilmiş oldu. Şimdi bu versiyonu silip yeni sürümü açalım ama önümüzde bir
            engel var, program çalışırken programı silemeyiz, o yüzden önce Process.Kill methodu ile programı sonlandıracağız.

            */

            Process.Start(DosyaIsmi); // çalıştır
            Process.Start(new ProcessStartInfo() // şuanki sürümü sil
            {
                Arguments = "/C choice /C Y /N /D Y /T 3 & Del \"" + Application.ExecutablePath + "\"",
                WindowStyle = ProcessWindowStyle.Hidden,
                CreateNoWindow = true,
                FileName = "cmd.exe"
            });
            Process.GetCurrentProcess().Kill();


        }

Evet her şey bitti. Butona tıklandığında otomatik güncelleme yapılması için önce güncelleme varmı diye kontrol edelim, eğer varsa güncelleyelim. Aşağıdaki kod her şeyi halledicektir. :)

C#:
if (GuncellemeVarmi())
            {

                DialogResult rn = MessageBox.Show("Güncelleme var, güncellesinmi?", "Güncelleme Uyarısı", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (rn == DialogResult.Yes)
                {
                    SonSurumeGuncelle();
                }

            }
            else
            {
                MessageBox.Show("Güncelleme yok, son sürümü kullandığınız için teşekkürler.", "Güncelleme Yok", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

Son

1638655287458.png


Evet denilirse, şu anki exe silinip yeni sürümlü exe indirilip çalıştırılıcaktır :) güncelleme yoksa gelicek görüntü;

1638655487135.png



Son

Bu konuda herhangi bir API, kaynak kullanmadan uygulamanızı en basit şekilde nasıl otomatik olarak güncelleyeceğinizi gösterdim :) eğer istek gelirse bunun hakkında bir dll kütüphanesi bile yapıp yayınlayabilirim. Konuya göz attığın için teşekkürler. Yapamadım edemedim diyorsan soruları burdan sorabilirsin :)

>>
Bağlantıları görmek için lütfen Giriş Yap

>>
Bağlantıları görmek için lütfen Giriş Yap

>> Discord: arsh#0106
 

Ekli dosyalar

  • 1638652246355.png
    1638652246355.png
    9.6 KB · Görüntüleme: 103
  • 1638653187076.png
    1638653187076.png
    7.9 KB · Görüntüleme: 107
Üye
Katılım
15 Ağu 2017
Mesajlar
23
Tepki puanı
1
Ödüller
8
8 HİZMET YILI
reis ben vb.net kullaniorum lütfen bana discorddan vb.net ile nasıl yapıcağımı anlatabilirmisin veyada kodları atsan yeterli
 
波マリファナ
Ultra Üye
Katılım
27 Nis 2018
Mesajlar
1,510
Çözümler
5
Tepki puanı
171
Ödüller
10
8 HİZMET YILI
hocam süpersin ellerine sağlık sürekli güncellemeye gerek yok
 
SİYAH KADAR DERTLİYİM
Süper Üye
Katılım
7 Nis 2016
Mesajlar
955
Çözümler
4
Tepki puanı
239
Ödüller
10
10 HİZMET YILI
Paylaşım için teşekkürler peki bunu androidte nasıl yapabiliriz
 
Süper Üye
Katılım
9 Ocak 2021
Mesajlar
1,000
Çözümler
1
Tepki puanı
102
Ödüller
5
Yaş
28
5 HİZMET YILI
Paylaşım için teşekkürler güzel konu olmuş
 
SxNy
Süper Üye
Katılım
8 Mar 2017
Mesajlar
1,331
Çözümler
10
Tepki puanı
125
Ödüller
9
Yaş
31
9 HİZMET YILI
Paylaşim güzel eline sağlik usta
 
Seçkin Üye
Katılım
21 Ara 2015
Mesajlar
355
Çözümler
3
Tepki puanı
47
Ödüller
10
10 HİZMET YILI
güzel konu teşekkürler.
 
Onaylı Üye
Katılım
22 Mar 2019
Mesajlar
146
Çözümler
2
Tepki puanı
13
Ödüller
7
Yaş
27
7 HİZMET YILI
Knk C++ Da Aynı Method İşe Yarar Mı
 
Uzman Üye
Katılım
2 Ara 2021
Mesajlar
209
Tepki puanı
20
Ödüller
3
4 HİZMET YILI
paylaşım için tesekkürler reis eline saglık
 
Ultra Üye
Katılım
2 Şub 2021
Mesajlar
1,520
Çözümler
1
Tepki puanı
80
Ödüller
7
Yaş
29
5 HİZMET YILI
hocam süpersin ellerine sağlık sürekli
Post automatically merged:

Ellerine sağlık paylaşım için
 
Son düzenleme:
sudo su
Süper Üye
Katılım
13 Eyl 2018
Mesajlar
769
Çözümler
5
Tepki puanı
77
Ödüller
6
Yaş
26
7 HİZMET YILI
Paylaşım için çok teşekkürler yararlı bi konu
 
Seçkin Üye
Katılım
5 Eyl 2021
Mesajlar
301
Tepki puanı
10
Ödüller
5
Yaş
25
4 HİZMET YILI
paylaşım güzel emeğe saygı
 
Onaylı Üye
Katılım
20 Tem 2020
Mesajlar
67
Tepki puanı
1
Ödüller
5
Yaş
24
5 HİZMET YILI
reis ben vb.net kullaniorum lütfen bana discorddan vb.net ile nasıl yapıcağımı anlatabilirmisin veyada kodları atsan yeterli lütfen
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst