WItam, mam problem chciałbym aby mój program automatycznie czytał wersję z pliku .txt, np. jest wersja 0.1 i zmienia się na 0.2 więc pobiera jakieś pliki i po pobraniu już nie pobiera następny raz, chodzi mi oto żeby po zmienieniu wersjii pobierało pliki i aktualizowało.
1.Robisz kopię 'version.ini'.
2.Pobierasz z serwera plik 'version.ini'.
3.Sprawdzasz wersję.
4.Porównujesz wersje kopii 'version.ini' z aktualną 'version.ini', jeżeli nowa to pobierasz.
5.Usuwasz kopię 'version.ini'
(Ale to jest najprostszy sposób sprawdzania wersji...)
Cały kod będzie jakoś tak:
Function Wersja(Plik: String): Integer;
Var Ini: TIniFile;
Begin
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + Plik);
Result := Ini.ReadInteger('Version', 'Ver', 0);
Ini.Free;
End;
Procedure Aktualizuj;
Begin
CopyFile('version.ini', 'temp.ini', False);
{Pobierasz plik 'version.ini' z serwera}
if Wersja('version.ini') > Wersja('temp.ini') Then Begin
{Pobierasz nowe pliki z serwera}
End;
DeleteFile('temp.ini');
{Potem tylko trzeba ponownie uruchomić aplikację}
End;
Z tym, że:
1.Wersja musi być liczbą całkowitą (1, 2, 3 itd.), nie może być liczbą zmiennoprzecinkową (0.1, 1.5, 9.0)
2.Jeżeli ktoś miał by wersję 1, a do pobrania byłaby wersja 5, to mogą być problemy, np.jeżeli zmienialiśmy w poprzednich wersjach ważne biblioteki, które są potrzebne do działania patcha 5. Trzeba by to jakoś poprawić, ale tym się sam zajmij.
Nie prościej zrobić to jak należy ?
W opcjach projektu masz dostępne ustawienia dot wersji, po co jakies zewnetrzene pliki ...
function GetAppVersion: string;
var
Size, Size2: DWord;
Pt, Pt2: Pointer;
begin
Size := GetFileVersionInfoSize(PChar (ParamStr (0)), Size2);
GetMem (Pt, Size);
GetFileVersionInfo (PChar (ParamStr (0)), 0, Size, Pt);
VerQueryValue (Pt, '\', Pt2, Size2);
with TVSFixedFileInfo (Pt2^) do
begin
Result:=
IntToStr (HiWord (dwFileVersionMS)) + '.' +
IntToStr (LoWord (dwFileVersionMS)) + '.' +
IntToStr (HiWord (dwFileVersionLS)) + '.' +
IntToStr (LoWord (dwFileVersionLS));
end;
FreeMem (Pt);
end;
Napisałem, że mój sposób to
...najprostszy sposób sprawdzania wersji
Ten twój, jest już 'zaawansowniejszy' ;-P (jeżeli istnieje takie słowo)
Zgadzam się z Patryk27, maciejmt twoja wersja jest dla bardziej zaawansowanych. Użyję wersji od Patryk27.
Patryk27 po zrobieniu wszystkiego pojawia mi się błąd: [Error] patcher.pas(50): Undeclared identifier: 'TIniFile'
dodaj tinifiles do sekcji uses. Ale metoda maciejmt-a jest prawidłowsza.
tinifiles
Raczej dodaj IniFiles
Patryk27:
2.Pobierasz z serwera plik 'version.ini'.
- Z jakiego serwera? pisz dokładniej
No chyba z tego na którym są aktualizacje.
chodzi mi oto że: ja chce aby z np moje komputera z jakiegoś folderu kopiowało pliki do tego gdzie jest ta aplikacja jeśli w version.ini jest 0.1 to pobiera np 1 plik i juz wiecej go nie pobiera ! a wy mi tu niewiem co piszecie
admix ile masz lat? co ty chcesz aktualizowac lokalnie?