Programın kendisini otmatik güncellemesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

Programın kendisini otmatik güncellemesi

Mesaj gönderen ikut »

Merhaba arkadaşlar

Şimdi arama tavsiyeleri gelecek ama baştan söyliim çok aradım. düşündüğüm şeyin cevabı olmadığı için yazıyorum.

düşündüğüm olay şu; Program netten bir xml dosyayı indiriecek ve burda her program için güncel sürüm no ve programın adı olacak... burdaki versiyonu kendi içindeki versiyonla karşılaştıracak ve gerekirse ineternetteki exeyi indirecek. Internette dosya indirmek tamam. sonra xml parse etmekte tamam ama

O exeyi indirdikten sonra program hala hafızada onun için güncellemeyi nasıl yapmalı. Bir program kendisi çalşırken kendi exesini silemez sonuçta...

Aklıma gelen interneteki dosyaya farklı bir isim veririz. sonra inetrnette programı çalıştırırız. o ise bakarki exe adı içinde tanımlanandan farklı, anlarki ilk defa setup oluyor. Ilgili exenin processi varsa kill eder..

Biliyorum soru biraz karışık ama bu işi yapan varmı. Yani yapan komponentler gördüm ama ben her iş ayrı bir compoent kullanmak istemiyorum.

Saygılar
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Bence şöyle bir yol izleyebilirsiniz. Projenizde programınızın versiyon bilgilerini girin. Sonra netteki db nize sürekli en son versiyonun numarasını yazın. (Yada ftp sunucuya text dosya koyup ona da versiyon yazabilirsiniz.) Kullanıcıdaki versiyon netteki textte yazılı olandan farklı ise onu kullanıcıdaki exe ile değiştirin. Güncelleme için ayrı bir exe kullanmanız durumundaki bir çözümdü bu. :D
ikut

Merhaba

Mesaj gönderen ikut »

shadowmann yazdı:Bence şöyle bir yol izleyebilirsiniz. Projenizde programınızın versiyon bilgilerini girin. Sonra netteki db nize sürekli en son versiyonun numarasını yazın. (Yada ftp sunucuya text dosya koyup ona da versiyon yazabilirsiniz.) Kullanıcıdaki versiyon netteki textte yazılı olandan farklı ise onu kullanıcıdaki exe ile değiştirin. Güncelleme için ayrı bir exe kullanmanız durumundaki bir çözümdü bu. :D
Merhaba

Yazdığınız bölüm zaten işin tamam olan kısmı. Internetten inen exeyi nasıl çalıştırıp eski exeyi silecek konusunda sorun... O bölüm konusunda bir yöntem lazım. Aslında mx webupdate var ama her iş içinde bir compoentn kullanmak istemiyorum

Saygılar
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Hocam internetten exe yi indiren ayrı bir dosya yani guncelleme.exe örneğin.
Dosyayı download ettikten sonra sizin eski dosyayı silip yerine bunu o klasöre kopyalayın. Burda sizin neyi anlamadığınızı anlamadım.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Öneri

Mesaj gönderen sabanakman »

Bu öneri uyarmı bilmiyorum ama bu eski programı silip yerine yenisini koyacak farklı küçük bir .exe yaz. Oradan organize etmeye çalış. Mesela projende

Kod: Tümünü seç

WinExec('Guncelle.exe',SW_HIDE);
Application.Terminate;
kodunu yazdıktan sonra güncellemek için ise

Kod: Tümünü seç

Sleep(1500);//1.5 sn programın kapanması ve hafızadan silinmesi beklenir
if Windows.CopyFile('Yeni.exe','Prog.Exe',False) then
 Windows.DeleteFile('Yeni.exe')
else ShowMessage('Güncelleme olmadı.');
kodları bir fikir verebilir belki.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikut

Merhaba

Mesaj gönderen ikut »

shadowmann yazdı:Hocam internetten exe yi indiren ayrı bir dosya yani guncelleme.exe örneğin.
Dosyayı download ettikten sonra sizin eski dosyayı silip yerine bunu o klasöre kopyalayın. Burda sizin neyi anlamadığınızı anlamadım.
Merhaba

Ortada 3.bir exeden bahsettiğinizi anlamadm. Bu şekilde kolay olur tabii. Mxwebupdatede böyle yapıyor. 3. bir exeye gerek kalmadan yapılamayacak galiba.

Saygılar
Kullanıcı avatarı
bluekid
Kıdemli Üye
Mesajlar: 541
Kayıt: 11 Haz 2004 10:45
İletişim:

Mesaj gönderen bluekid »

bat file olarakta yazabilirsin

Kod: Tümünü seç

del Prog.Exe
ren Yeni.exe Prog.Exe
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

@bk biraz daha geniş detay verirmisin.
Kullanıcı avatarı
bluekid
Kıdemli Üye
Mesajlar: 541
Kayıt: 11 Haz 2004 10:45
İletişim:

Mesaj gönderen bluekid »

programın içinden öncelikle
bir text dosya oluştur ve içine

Kod: Tümünü seç

del Prog.Exe
ren Yeni.exe Prog.Exe
del Gun.bat
diye yaz ve Gun.bat isminde kaydet sonrası aynı

WinExec('Gun.bat',SW_HIDE);
Application.Terminate;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bu güncelleme işi AutoUpgrader adlı ve ücretli bir bileşenle yapılabiliyor. http://www.appcontrols.com/components.html
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

Çalışan uygulama silinemez ama adı değiştirilebilir :D
Ben bu şekilde hallediyorum. Mevcut exenin adını eski yapıp yeni exeyi açıyorum. eski exeyede close komutu veriyorum. yeni exe eski exe kapanana kadar bekliyor, sonra onun dosyasını siliyor. kendi adınıda gerçek exe adına çeviriyor.

Kod: Tümünü seç

  if UpperCase(ExtractFileName(Application.ExeName))='DERSHANEOTOMASYONUYENI.EXE' then
  begin
    while FileExists(extractfilepath(Application.ExeName)+'DershaneOtomasyonu.exe')=true do
    begin
      deletefile(extractfilepath(Application.ExeName)+'DershaneOtomasyonu.exe');
      sleep(100);
    end;
    CopyFile(pchar(Application.exename),PCHAR(extractfilepath(Application.ExeName)+'DershaneOtomasyonu.exe'),true);
    WinExec(pchar(extractfilepath(Application.ExeName)+'DershaneOtomasyonu.exe'),0);
    Application.Terminate;
    Exit;
  end;
  if FileExists(extractfilepath(Application.ExeName)+'DershaneOtomasyonuYeni.exe')=true and (UpperCase(ExtractFileName(Application.ExeName))='DERSHANEOTOMASYONU.EXE') then
  begin
    while FileExists(extractfilepath(Application.ExeName)+'DershaneOtomasyonuYeni.exe')=true do
    begin
      deletefile(extractfilepath(Application.ExeName)+'DershaneOtomasyonuYeni.exe');
      sleep(100);
    end;
  end;
Cevapla