Seçkin Üye
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.
> İyi tamam da, uygulama yeni sürüm bilgilerini nerden çekicek? bunun için github gist kullanıp raw linkini alacağız.
Burda gist secret olsun ki kimse göremesin. Create secret gist diyip gistimizi oluşturalım. Aşağıdaki gibi raw linkini alalım.
Dikkat - Github gist raw linki her güncellediğinizde değişmektedir. Sabit kalmasını istiyorsanız
2 - Uygulama oluşturma
Şimdi de uygulamamızı açalım, "Güncelleme denetle" gibi bir buton ekleyelim.
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.
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ı.
Ç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.
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.
Son
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ü;
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 
>>
>>
>> Discord: arsh#0106
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.
> İ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 | LinkBurda gist secret olsun ki kimse göremesin. Create secret gist diyip gistimizi oluşturalım. Aşağıdaki gibi raw linkini alalım.
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.
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ı.
Ç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
Evet denilirse, şu anki exe silinip yeni sürümlü exe indirilip çalıştırılıcaktır
Son
Bu konuda herhangi bir API, kaynak kullanmadan uygulamanızı en basit şekilde nasıl otomatik olarak güncelleyeceğinizi gösterdim
>>
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