Dziękuje wszystkim za odpowiedzi.
Zrobiłem , a raczej próbowałem zrobic podmianę programu tak :
Program sprawdza czy jest dostepna nowa wersja , jezeli tak :
- zakładam, że program nazywa się generator.exe
- generator sprawdza czy jest nowa wersja, jezeli tak , to 'wyrzuca z zasobow program o nazwie updater.exe'
- Updater.exe sie uruchamia i sciaga od razu wersje programu ze strony (za pomoca pliku ini) i od razu usuwa plik .ini
- Updater.exe tworzy plik update.bat, który przeniesie program2 do program.exe i skasuje samego siebie.
Tylko mam problem, mianowicie chce zeby zdarzył update.exe pobrac plik program2.exe zanim sam sie wylaczy i wykona wszystkie funkcje...
Przedstawiam kod updatera.
Chcialbym, zeby wlasnie po sciagnieciu pliku dopiero, uruchomil update.bat i sam sie zamknal , bo jak daje Application.Terminate;
To nie zdarzy sciagnac program2.exe tylko od razu sie wylacza..
Probowalem dac sleep(1000); itd , ale to tak jakby wstrzymuje caly program na taki okres czasu.
Prosze o pomoc.
Zapewne trzeba gdzies dac petle, ze jezeli plik sie sciaganie ...
to dopiero wykonuj instrukcje, ale nie wiem jak to zastosowac dokladniej ,wiec jak ktos moze prosze o pomoc. Jestem poczatkujacy, dopiero sie ucze, chcialem dojsc do tego samemu,lecz no niestety mam problem w 'ostatnim' etapie.
Kod:
Kopiuj
procedure TForm1.FormCreate(Sender: TObject);
begin
HTTPGet1.URL := 'http://www.domena.pl/version.ini';
HTTPGet1.FileName := ExtractFilePath(Application.ExeName) + 'version.ini';
HTTPGet1.GetFile;
end;
procedure TForm1.HTTPGet1DoneFile(Sender: TObject; FileName: String;
FileSize: Integer);
var
INI : TINIFile;
updtVersion : string;
CF : TextFile;
begin
INI := TINIFile.Create(HTTPGet1.FileName);
try
updtVersion := INI.ReadString('update','version','');
begin
HTTPGet2.URL := INI.ReadString('update','url','');
HTTPGet2.FileName := ExtractFileDir(ParamStr(0))+ '\program2.exe';
HTTPGet2.GetFile;
end;
finally
INI.Free;
DeleteFile(HTTPGet1.FileName);
AssignFile(CF,ExtractFilePath(ParamStr(0))+ 'update.bat');
try
ReWrite(CF);
WriteLN(CF,'move program2.exe program.exe');
WriteLN(CF,'program.exe');
WriteLN(CF,'del update.bat ');
WriteLN(CF,'exit');
finally
CloseFile(CF);
WinExec('update.bat', SW_SHOW); <---- uruchamiany bat
Application.Terminate; <---- wylaczanie updater.exe
end;
end;
end;
procedure TForm1.HTTPGet2Progress(Sender: TObject; TotalSize,
Readed: Integer);
begin
ProgressBar1.Max := TotalSize;
ProgressBar1.Position := Readed;
end;
end.
LOL , wystarczylo w onDoneFile po prostu dac te dwie komendy.
Problem rozwiazany, do zamkniecia.