Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kolay güncelleme için internete yükleme yeri
#1
Merhaba arkadaşlar,
Genel olarak Windows için yazılmış uygulamaları internete nasıl yüklemeyi tavsiye edersiniz? Özellikle ileride güncelleme yapılması gerektiği zaman çok sayıda kullanıcının kolay ulaşması için en kolay yol hangisidir: 


  1. Windows Mağaza / Store'a yüklemek mi (Windows Mağaza'ya yükleme yapmanın mahzurları var mıdır?)
  2. yoksa hosting satın alıp internet sitesi üzerinden bir şekilde kullanıcıların indirmesini sağlamak mı daha kolaydır (bu durumda uygulamanın içinde "güncelleme kontrol" gibi bir kod da yazmak lazım galiba)

Desteğiniz için şimdiden teşekkürler
 ﴾ ֍ ﴿
Cevapla
#2
Firebase Cloud incelemek isteyebilirsiniz. Çünkü host olarak da kullanılabiliyor. Ekstra maliyete lüzum kalmaz. 

Sorunuzun iki kısımdan oluştuğunu görünce ekleyeyim dedim :
  • Proje açıldığında internet bağlantı kontrolü
  • Bağlantı varsa mevcut sürüm no ile karşılaştırma yapabilmek için hosttaki text/db vb. son güncel sürüm no sorgusu
  • Fark varsa kullanıcıdan geçiş için onay talep edilmesi
  • Talep onayı alınmışsa Temp klasöre yeni sürüm paketini internet host üzerinden indirmek
  • Çalışan uygulamanın çalışma anında rename ile adını değiştirmek
  • Temp klasörde indirilmiş paket içeriğini, ismi değiştirilen orjinal konuma orjinal adıyla kopyalamak
  • Bir batch dosya (cmd/bat) oluşturmak. Bu dosya içinde kendini çalıştıracak konum ve exe adı girmek
  • Proje onclose olayında bu batch dosyayı run etmek ardından kendinin (eski sürüm) kapanması...
  • Yeni açılan projenin oncreate/onshow kısmında batch dosyası ile ismi değiştirilen eski exe dosya varsa kontrol edip silmek.

Güncelleme sekansı bu şekilde bir yapıdır.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#3
(25-06-2020, Saat: 18:51)emozgun Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar,
Genel olarak Windows için yazılmış uygulamaları internete nasıl yüklemeyi tavsiye edersiniz? Özellikle ileride güncelleme yapılması gerektiği zaman çok sayıda kullanıcının kolay ulaşması için en kolay yol hangisidir: 


  1. Windows Mağaza / Store'a yüklemek mi (Windows Mağaza'ya yükleme yapmanın mahzurları var mıdır?)
  2. yoksa hosting satın alıp internet sitesi üzerinden bir şekilde kullanıcıların indirmesini sağlamak mı daha kolaydır (bu durumda uygulamanın içinde "güncelleme kontrol" gibi bir kod da yazmak lazım galiba)

Desteğiniz için şimdiden teşekkürler

Kendi sitemizde ftp ile ulaşılan klasöre  güncel versiyon rar dosyasını  ve versiyon.txt  adlı güncel versiyon numarasını içeren dosyaları ekliyoruz.

programda form create bölümüne
if fileexists(cal_yol + '\siteversiyon.txt') then  DeleteFile(cal_yol + 'siteversiyon.Txt'); // daha önce indirilmiş dosya varsa sil
 prgversiyon (Application.ExeName, V1, V2, V3,V4); // mevcut exe nin versiyonunu al

sonra program güncelleme açık ise

 procedure VersiyonKontrol;
var SiteVersiyon: string;
FTPAdres,KaynakDizin,Name,Pass,KaynakDosya,HedefDosya : String;
begin

FTPAdres := 'ftp.xxxxxx.com.tr';
KaynakDizin := '/';
Name := '???@xxxxxx.com.tr';
Pass := '*****';
KaynakDosya := 'siteversiyon.txt';
HedefDosya  := cal_yol+'siteversiyon.txt'; // yeni versiyon bilgisini almak için ftp bilgileri


If FTPDosyaAl(KaynakDosya, HedefDosya, FTPAdres, KaynakDizin, Name, Pass ) then  
begin
giris_frm.sitememo.Lines.LoadFromFile(cal_yol+'siteversiyon.txt'); //YENİ SÜRÜMÜN VERSİYONUNUN YAZILI OLDUĞU TEXT DOSYASI
siteversiyon := trim(giris_frm.sitememo.Lines[0]);
IDAntiFreeze.Free; // yn indirebilmek için burada free yapıyorum
ftp1.free;
 if trim(SiteVersiyon) <> trim(giris_frm.edt_Versiyon.caption) then
  begin  if Application.MessageBox('Yeni versiyon çıkmış indirmek ister misiniz?','SORGU',MB_YESNO+MB_ICONQUESTION)=6 then
               begin
                 // buraya yeni versiyon inmesi için kodlar yazılacak
                 FTPAdres := 'ftp.xxxxxx.com.tr';
                 KaynakDizin := '/';
                 Name := '???@xxxxxx.com.tr';
                 Pass := '*****';
                 KaynakDosya := 'yyyy.yn';
                 HedefDosya  := cal_yol+'Guncelleme.rar';
                         If FTPDosyaAl(KaynakDosya, HedefDosya, FTPAdres, KaynakDizin, Name, Pass ) then //indirme başarılı ise 
                                   begin
                                   RenameFile(cal_yol+'yyyy.exe',cal_yol+'yyyy'+datetostr(date())+'.esk');
                                   RenameFile(cal_yol+'yyyy.yn',cal_yol+'yyyy.exe');
                                   ShowMessage('Güncelleme tamamlandı programı tekrar başlatın');
                                   dataset_kapat;
                                   Halt;
                                   ShowMessage('Güncelleme tamamlandı program klasörüne indirildi.');
                                   end else ShowMessage('Güncelleme hatalı daha sonra tekrar deneyin');

                 end ;

  end else Showmessage('Güncel versiyon kullanıyorsunuz.');

end; // güncelleştirme karşılaştırması sonu

end;

function FTPDosyaAl(SrcDosya, DesDosya:TFileName; Ftp, RemoteDir, Login, Pass : String ):Boolean;
begin // Uses IdFTP, IdFTPCommon
ftp1:=TidFTP.Create(nil);
IDAntiFreeze := TIDAntiFreeze.Create(NIL); // büyük dosyalar inerken donmasın diye
Result := False;
Ftp1.Host := Ftp;
Ftp1.Username := Login;
Ftp1.Password := Pass;
Ftp1.Passive := True;
Ftp1.Connect;
If Ftp1.Connected then
begin
Ftp1.ChangeDir(RemoteDir);
Try
Ftp1.TransferType := ftBinary; // Uses IdFTPCommon
Ftp1.Get(SrcDosya, DesDosya, True);
Finally
Result := True;
end;
Ftp1.Quit;
end;
end;

 fonksiyonu ile  ftp den güncel versiyonun yazılı olduğu dosyayı indiriyoruz. 
bu kodların çoğunu @mrmarman   hocamdan faydalanarak yazmıştık.
sonra değişiklik yaparak aynı mantıkla internet üzerinden lisans kontrolu ve güncelleme hakkı gibi işlemler eklendi.
Bu ilk hali
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#4
Windows Mağaza / Store'a yüklemek mi sorun var yüklediğin uygulama tamamın yazma kuralamalı olarak yükleniyor, bir veritabanı varsa sadece okuma yapıyor.
Cevapla
#5
(25-06-2020, Saat: 21:35)cinarbil Adlı Kullanıcıdan Alıntı:
(25-06-2020, Saat: 18:51)emozgun Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar,
Genel olarak Windows için yazılmış uygulamaları internete nasıl yüklemeyi tavsiye edersiniz? Özellikle ileride güncelleme yapılması gerektiği zaman çok sayıda kullanıcının kolay ulaşması için en kolay yol hangisidir: 


  1. Windows Mağaza / Store'a yüklemek mi (Windows Mağaza'ya yükleme yapmanın mahzurları var mıdır?)
  2. yoksa hosting satın alıp internet sitesi üzerinden bir şekilde kullanıcıların indirmesini sağlamak mı daha kolaydır (bu durumda uygulamanın içinde "güncelleme kontrol" gibi bir kod da yazmak lazım galiba)

Desteğiniz için şimdiden teşekkürler

Kendi sitemizde ftp ile ulaşılan klasöre  güncel versiyon rar dosyasını  ve versiyon.txt  adlı güncel versiyon numarasını içeren dosyaları ekliyoruz.

programda form create bölümüne
if fileexists(cal_yol + '\siteversiyon.txt') then  DeleteFile(cal_yol + 'siteversiyon.Txt'); // daha önce indirilmiş dosya varsa sil
 prgversiyon (Application.ExeName, V1, V2, V3,V4); // mevcut exe nin versiyonunu al

sonra program güncelleme açık ise

 procedure VersiyonKontrol;
var SiteVersiyon: string;
FTPAdres,KaynakDizin,Name,Pass,KaynakDosya,HedefDosya : String;
begin

FTPAdres := 'ftp.xxxxxx.com.tr';
KaynakDizin := '/';
Name := '???@xxxxxx.com.tr';
Pass := '*****';
KaynakDosya := 'siteversiyon.txt';
HedefDosya  := cal_yol+'siteversiyon.txt'; // yeni versiyon bilgisini almak için ftp bilgileri


If FTPDosyaAl(KaynakDosya, HedefDosya, FTPAdres, KaynakDizin, Name, Pass ) then  
begin
giris_frm.sitememo.Lines.LoadFromFile(cal_yol+'siteversiyon.txt'); //YENİ SÜRÜMÜN VERSİYONUNUN YAZILI OLDUĞU TEXT DOSYASI
siteversiyon := trim(giris_frm.sitememo.Lines[0]);
IDAntiFreeze.Free; // yn indirebilmek için burada free yapıyorum
ftp1.free;
 if trim(SiteVersiyon) <> trim(giris_frm.edt_Versiyon.caption) then
  begin  if Application.MessageBox('Yeni versiyon çıkmış indirmek ister misiniz?','SORGU',MB_YESNO+MB_ICONQUESTION)=6 then
               begin
                 // buraya yeni versiyon inmesi için kodlar yazılacak
                 FTPAdres := 'ftp.xxxxxx.com.tr';
                 KaynakDizin := '/';
                 Name := '???@xxxxxx.com.tr';
                 Pass := '*****';
                 KaynakDosya := 'yyyy.yn';
                 HedefDosya  := cal_yol+'Guncelleme.rar';
                         If FTPDosyaAl(KaynakDosya, HedefDosya, FTPAdres, KaynakDizin, Name, Pass ) then //indirme başarılı ise 
                                   begin
                                   RenameFile(cal_yol+'yyyy.exe',cal_yol+'yyyy'+datetostr(date())+'.esk');
                                   RenameFile(cal_yol+'yyyy.yn',cal_yol+'yyyy.exe');
                                   ShowMessage('Güncelleme tamamlandı programı tekrar başlatın');
                                   dataset_kapat;
                                   Halt;
                                   ShowMessage('Güncelleme tamamlandı program klasörüne indirildi.');
                                   end else ShowMessage('Güncelleme hatalı daha sonra tekrar deneyin');

                 end ;

  end else Showmessage('Güncel versiyon kullanıyorsunuz.');

end; // güncelleştirme karşılaştırması sonu

end;

function FTPDosyaAl(SrcDosya, DesDosya:TFileName; Ftp, RemoteDir, Login, Pass : String ):Boolean;
begin // Uses IdFTP, IdFTPCommon
ftp1:=TidFTP.Create(nil);
IDAntiFreeze := TIDAntiFreeze.Create(NIL); // büyük dosyalar inerken donmasın diye
Result := False;
Ftp1.Host := Ftp;
Ftp1.Username := Login;
Ftp1.Password := Pass;
Ftp1.Passive := True;
Ftp1.Connect;
If Ftp1.Connected then
begin
Ftp1.ChangeDir(RemoteDir);
Try
Ftp1.TransferType := ftBinary; // Uses IdFTPCommon
Ftp1.Get(SrcDosya, DesDosya, True);
Finally
Result := True;
end;
Ftp1.Quit;
end;
end;

 fonksiyonu ile  ftp den güncel versiyonun yazılı olduğu dosyayı indiriyoruz. 
bu kodların çoğunu @mrmarman   hocamdan faydalanarak yazmıştık.
sonra değişiklik yaparak aynı mantıkla internet üzerinden lisans kontrolu ve güncelleme hakkı gibi işlemler eklendi.
Bu ilk hali

Çok teşekkürler @mrmarman @cinarbil uygulamama ekliyorum. çok büyük iş yükünden kurtardınız.

(25-06-2020, Saat: 19:39)mrmarman Adlı Kullanıcıdan Alıntı: Firebase Cloud incelemek isteyebilirsiniz. Çünkü host olarak da kullanılabiliyor. Ekstra maliyete lüzum kalmaz. 

Sorunuzun iki kısımdan oluştuğunu görünce ekleyeyim dedim :
  • Proje açıldığında internet bağlantı kontrolü
  • Bağlantı varsa mevcut sürüm no ile karşılaştırma yapabilmek için hosttaki text/db vb. son güncel sürüm no sorgusu
  • Fark varsa kullanıcıdan geçiş için onay talep edilmesi
  • Talep onayı alınmışsa Temp klasöre yeni sürüm paketini internet host üzerinden indirmek
  • Çalışan uygulamanın çalışma anında rename ile adını değiştirmek
  • Temp klasörde indirilmiş paket içeriğini, ismi değiştirilen orjinal konuma orjinal adıyla kopyalamak
  • Bir batch dosya (cmd/bat) oluşturmak. Bu dosya içinde kendini çalıştıracak konum ve exe adı girmek
  • Proje onclose olayında bu batch dosyayı run etmek ardından kendinin (eski sürüm) kapanması...
  • Yeni açılan projenin oncreate/onshow kısmında batch dosyası ile ismi değiştirilen eski exe dosya varsa kontrol edip silmek.

Güncelleme sekansı bu şekilde bir yapıdır.
@mrmarman @nguzeller gerçekten çok önemli bilgiler bunlar, inanın ufkum açıldı. Çok teşekkürler.  
Firebase Cloud'u inceliyorum. Windows Store değil, Microsoft Azure karşılığı. Spark plan ücretsiz. Çok güçlü, aynı anda 100 kişi 10 GB veritabanı üzerinden sohbet, mesajlaşma, sosyal paylaşım, hatta stok takip yapabiliyor. Siz usta profesyoneller için basit gelebilir ama NoSQL, baas, json, RESTful API bilmeyen biri olarak bana çok karmaşık geldi. Çok iyi ingilizce ve bulut terimlerini bilmek gerekiyor. Hosting'e windows uygulaması yüklemek için Firebase CLI yükledim fakat Dos konsolu arayüz çıktı, komutları ve adım adım yükleme şeklini araştırmak gerekecek. Bulamazsam Firebase yerine şu anda Windows Store veya kendi sitemizden yükleme daha kolay görünüyor.
 ﴾ ֍ ﴿
Cevapla
#6
Ben 2. seçeneğiniz kullanıyorum. Zaten hali hazırda bir hostum var. oradan txt dosyasına yeni sürümü numaramı atıyorum.. Eğer lolcaldekinden farklı ise yeni exe'yi download ettirtip yeni versiyona geçişini sağlattırıyorum.

Hatta 2021 de bu işlemi NAtrodan satın aldığım sunucumda yaptırtacağım.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#7
Merhaba,

versiyon.txt yerine minik bir servis üzerinden de versiyon kontrolüyle birlikte lisans kontrolünü de yaptırmanızı öneririm. Request ve response izlenememesi ve manupule edilememesi için encrypt/decrypt yapılabilir giriş dönüş parametreleri. Burada güncelleme yetkisi olmayan bir müşteriye ya da istemciye güncelleme indirtmeyebilirsiniz.

Aslında versiyon güncelleme ile ilgili firebase + host birleşimi bir fikrim var. Güncelleme yayınladığınız anda güncelleme yetkisi olanlara firebase üzerinden pasif bildirim ile arka planda uygulamayı güncelletebiliriz (Host üzerinden). Ama bunun için uygulamanın açık olması ya da arkaplanda ufak bir servis çalışması gerekiyor. Bu konuda fikri / çalışması olan var mı ?
Cevapla
#8
Merhaba @mad85

* Yeni sürüm kontrolü, evet lisans kontrolü için de kullanılabilir.  

* Firebase'i tavsiye ediyorum. Hatta yazılım içi intercom ( haberleşme ) için de kullanılabilir. 

* OAuth 2.0 için daha önce konuştuğumuz bir konu vardı. 

* Ben kendimce imzalama kısmını PHP yakasına taşıdım ve öyle kullanıyorum. Yani hostumdaki PHP'ye HTTPS ile yazılım projeme özel generik bilgileri (header, claims vb.) gönderip, orada bana özel konumda mevcut anahtar (PEM/KEY) ile RAS'lı sha256 ile imzalanmış şekilde access_token ve expires_in süresini alıp timeout sonuna kadar onu kullanmak şeklinde bir tercihim oldu. Böylece KEY bilgisini yazılım içerisinde tutmayıp güvenli sularda barındırıyorum. Ek olarak bu kısmı hiçbir projemde düşünmek zorunda da kalmıyorum. FastFood işi yani..  Smile     

* OAuth2 konusunun burada yeri nedir diye soracaklar için bildireyim, Google API servislerinin Server to Server (yani kullanıcıdan ek onay olmadan) kullanımı için artık olmazsa olmazı OAuth2 yetkilendirme sistemidir.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Yararlı Kütüphane için Fonksiyonlar 3ddark 1 743 12-10-2019, Saat: 19:11
Son Yorum: frmman
  Android ve IOS için Debug işlemini hızlandırma Tuğrul HELVACI 0 1.000 01-06-2018, Saat: 09:19
Son Yorum: Tuğrul HELVACI
  Exception için Çoklu Satır Kullanımı Halil Han Badem 0 952 23-02-2018, Saat: 17:28
Son Yorum: Halil Han Badem
Thumbs Up [Delphi] Yeni Başlayanlar İçin Güzel Kaynak Halil Han Badem 1 2.484 06-02-2018, Saat: 01:25
Son Yorum: Halil Han Badem



Konuyu Okuyanlar: 1 Ziyaretçi