Güncelleme öncesi kaynak dosyanın silinmesi engelleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
abdullahcetinel
Üye
Mesajlar: 35
Kayıt: 12 Ağu 2014 09:45

Güncelleme öncesi kaynak dosyanın silinmesi engelleme

Mesaj gönderen abdullahcetinel »

Programımda bu siteden almış olduğum netten güncelleme modülü mevcut. Fakat kodları ben yazmadığım işin içinden çıkamadığım bir nokta var. Program web siteme bağlanıyor. hedef dosyayı buluyor. lokal deki kaynak dosyayı siliyor. hedef dosyayı indiriyor. hedef dosyayı çalıştırıp program açılıyor. Burda bir sorun yok. Fakat hedef dosyanın inmesi esnasında bir problem olursa (yarıda kalıp veya internetin kesilmesi gibi) kaynak dosyayı sildiği için program açılmıyor. Kaynak dosya silindiği için program tekrar güncelle mede yapmıyor. Yapmak istediğim olay sunucuya bağlansın, hedef dosyayı indirirse, kaynak dosyayı silip öyle yer değiştirsin ve programı çalıştırsın, yada bu işlem zor olursa sunucuya bağlansın, kaynak dosyanın adını değiştirsin, hedef dosyayı başarılı bir şekilde indirirse kaynak dosyayı silsin ve inen hedef dosyayı çalıştırsın.

Kod: Tümünü seç

function FTPDosyaAl( IdFTP : TIdFTP; SrcDosya, DesDosya:TFileName; Ftp, RemoteDir, Login, Pass : String ):Boolean;
begin // Uses IdFTP, IdFTPCommon
Result := False;
IdFtp.Host := Ftp;
IdFtp.Username := Login;
IdFtp.Password := Pass;
IdFtp.Passive := True;
IdFtp.Connect;
If IdFtp.Connected then
begin
frmguncelle.Memo1.Lines.Add('Sunucuyu başarıyla bağlanıldı.');
IdFtp.ChangeDir(RemoteDir);
xDosyaUzunluk := IdFtp.Size( SrcDosya );
Try
//IdFtp.TransferType := ftBinary; // Uses IdFTPCommon
IdFtp.Get(SrcDosya, DesDosya, False);
Finally
Result := True;
end;
IdFtp.Quit;
end;
end;
procedure Tfrmguncelle.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  ProgressBar1.Position := AWorkCount;
  Application.ProcessMessages;
end;

procedure Tfrmguncelle.IdFTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
  ProgressBar1.Min := 0;
  ProgressBar1.Max := xDosyaUzunluk;
  ProgressBar1.Position := 0;
  ProgressBar1.Visible  := True;

end;

procedure Tfrmguncelle.IdFTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  ProgressBar1.Position := 0;
  ProgressBar1.Visible  := False;
end;

procedure Tfrmguncelle.SpeedButton1Click(Sender: TObject);
Var
FTPAdres,
KaynakDizin,
Name,
Pass,
KaynakDosya,
HedefDosya : String;
onay:integer;
begin
FTPAdres := '*********.net';
KaynakDizin := '/www/update';
Name := '*******;
Pass := '******';
KaynakDosya := 'uygulamam.exe';
HedefDosya := ExtractFilePath(Application.Exename) + KaynakDosya;
If FTPDosyaAl( IdFtp1, KaynakDosya, HedefDosya, FTPAdres, KaynakDizin, Name, Pass ) then
  begin
    Memo1.Lines.Add('Güncelleme işlemi başarıyla tamamlandı.'+HedefDosya);
    Memo1.Lines.Add('Program başlatılıyor....'+HedefDosya);
    Sleep(3000);
    ShellExecute(0, 'open', PChar(getcurrentdir+'\uygulamam.exe'), nil, nil, SW_SHOW);
    frmguncelle.Close;
  end
else Memo1.Lines.Add('Güncelleme işleminde hata oluştu.'+KaynakDosya);
If FileExists(HedefDosya) then
  begin
  Memo1.Lines.Add('Kaynak dosya bulundu.');
  DeleteFile(HedefDosya);
  Memo1.Lines.Add('Kaynak dosya silindi.');
  end;
end;
procedure Tfrmguncelle.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
  StatusBar1.SimpleText := AStatusText;
end;
end.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Güncelleme öncesi kaynak dosyanın silinmesi engelleme

Mesaj gönderen greenegitim »

DeleteFile(HedefDosya); yerine rename yap
Mücadele güzelleştirir!
abdullahcetinel
Üye
Mesajlar: 35
Kayıt: 12 Ağu 2014 09:45

Re: Güncelleme öncesi kaynak dosyanın silinmesi engelleme

Mesaj gönderen abdullahcetinel »

hallettim.

RenameFile(HedefDosya,'uygulamam.old');

şeklinde düzelttim. Güncelleme başarılı olunca bu dosyayı sildim. Güncelleme başarılı olmazsa. Bu dosyayı

RenameFile('uygulamam.old','uygulamam.exe');

diyerek eski haline çevirdim şimdilik işimi gördü.
Cevapla