Programın kendisini otmatik güncellemesi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Programın kendisini otmatik güncellemesi
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
Ş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
-
- Üye
- Mesajlar: 508
- Kayıt: 30 Oca 2004 10:49
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. 

Merhaba
Merhabashadowmann 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.
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
-
- Üye
- Mesajlar: 508
- Kayıt: 30 Oca 2004 10:49
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Öneri
Bu öneri uyarmı bilmiyorum ama bu eski programı silip yerine yenisini koyacak farklı küçük bir .exe yaz. Oradan organize etmeye çalış. Mesela projende
kodunu yazdıktan sonra güncellemek için ise
kodları bir fikir verebilir belki.
Kod: Tümünü seç
WinExec('Guncelle.exe',SW_HIDE);
Application.Terminate;
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ı.');
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Merhaba
Merhabashadowmann 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.
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
bat file olarakta yazabilirsin
Kod: Tümünü seç
del Prog.Exe
ren Yeni.exe Prog.Exe
programın içinden öncelikle
bir text dosya oluştur ve içine
diye yaz ve Gun.bat isminde kaydet sonrası aynı
WinExec('Gun.bat',SW_HIDE);
Application.Terminate;
bir text dosya oluştur ve içine
Kod: Tümünü seç
del Prog.Exe
ren Yeni.exe Prog.Exe
del Gun.bat
WinExec('Gun.bat',SW_HIDE);
Application.Terminate;
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!!
Çalışan uygulama silinemez ama adı değiştirilebilir
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.

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;