Skocz do zawartości

[Delphi] Update programu - Zła nazwa ściągniętego pliku...


Defozo

Polecane posty

Witam, chcę napisać program, który będzie sprawdzał update.. oraz je ściągał i uruchamiał...

 

Mam taki kod:

KOD

procedure TForm1.FormCreate(Sender: TObject);

var

Reg: TRegistry;

begin

HTTPGet1.URL := 'http://applications.cba.pl/forum/version.ini'; //lokalizacja pliku z informacją

HTTPGet1.FileName := ExtractFilePath(Application.ExeName) + 'version.ini';

HTTPGet1.GetFile; //pobranie pliku ini

Reg := TRegistry.Create;

Reg.RootKey := HKEY_LOCAL_MACHINE;

try

Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',False);

Reg.WriteString('MojProgram', ExtractFilePath(Application.ExeName) + ParamStr(0));

finally

Reg.CloseKey;

Reg.Free;

end;

end;

 

procedure TForm1.HTTPGet1DoneFile(Sender: TObject; FileName: String;

FileSize: Integer);

begin

WersjaHTTP.Lines.LoadFromFile('version.ini');

WersjaHTTPI := StrToInt(WersjaHTTP.Text);

WersjaProg.Lines.LoadFromFile('myver.ini');

WersjaProgI := StrToInt(WersjaProg.Text);

If (WersjaHTTPI > WersjaProgI) then

begin

HttpGet2.URL := 'http://applications.cba.pl/forum/' + IntToStr(WersjaHTTPI) + '.ini';

HttpGet2.GetFile;

end

Else

end;

 

procedure TForm1.HTTPGet2DoneFile(Sender: TObject; FileName: String;

FileSize: Integer);

begin

Download.Lines.LoadFromFile('download.ini');

DownloadS := Download.Lines[1];

NazwaS := Download.Lines[2];

HttpGet3.FileName := NazwaS;

HttpGet3.URL := DownloadS;

HttpGet3.GetFile;

end;

 

procedure TForm1.HTTPGet3DoneFile(Sender: TObject; FileName: String;

FileSize: Integer);

begin

ShellExecute(Handle, 'open', PChar(NazwaS), nil, nil, SW_SHOWNORMAL);

WersjaProg.Clear;

WersjaProg.Lines.Add(IntToStr(WersjaHTTPI));

WersjaProg.Lines.SaveToFile('myver.ini');

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

HTTPGet1.URL := 'http://applications.cba.pl/forum/version.ini'; //lokalizacja pliku z informacją

HTTPGet1.FileName := ExtractFilePath(Application.ExeName) + 'version.ini';

HTTPGet1.GetFile; //pobranie pliku ini

end;

 

Problem w tym, że program ściąga/tworzy jakiś plik o nazwie "ppli", zamiast właściwego podanego w download.ini...

 

W plikach na serwerze znajduje się:

 

2.ini:

KODhttp://applications.cba.pl/forum/Project1.cfg

Project1.cfg

 

version.ini:

KOD2

 

Oraz project1.cfg....

 

A w folderze z programem:

 

myver.ini:

KOD1

 

Co jest nie tak?

 

Proszę, pomóżcie mi napisać choć jeden dobry program! Bo ostatnio coś mi to w ogóle nie wychodzi :(

 

Proszę o pomoc,

Pozdrawiam,

Defozo

Link do komentarza
Udostępnij na innych stronach

Tego się tak nie robi.

1. Odwalasz formatko-logię, oddziela się interfejs od głównego kodu...

2. Gdzie są wcięcia?

3. Po co ci to ini i komponenty? Synapse + Zwykły plik txt

4. Nie porównuj wersji programu tylko datę wydania...

5. Niech user sam sobie sciąga łatkę/nowszą wersję

 

Jak poprawisz punkty 1 i 2 to przejrzę twój kod ;)

Ja korzystam z czegoś takiego -> funkcja wysyłająca po HTTP date aplikacji do serwera, serwer zwraca info: brak nowszych / nowa wersja / update wymuszony.

 

Client-side:

$lastUpdateDate = '2008-12-10';
$forcedDate = '2008-12-10';

if(!isset($_GET['date']))
{
echo $lastUpdateDate;
}
else
{
       if($_GET['date'] >= $lastUpdateDate && $_GET['date'] >= $forcedDate)
       {
echo "OK\n";
       }
       elseif($_GET['date'] < $forcedDate)
       {
echo "FORCED\n";
       }
       elseif($_GET['date'] < $lastUpdateDate && $_GET['date'] >= $forcedDate)
       {
echo "NEW\n";
       }
}

Server-side:

$lastUpdateDate = '2008-12-10';
$forcedDate = '2008-12-10';

if(!isset($_GET['date']))
{
echo $lastUpdateDate;
}
else
{
       if($_GET['date'] >= $lastUpdateDate && $_GET['date'] >= $forcedDate)
       {
echo "OK\n";
       }
       elseif($_GET['date'] < $forcedDate)
       {
echo "FORCED\n";
       }
       elseif($_GET['date'] < $lastUpdateDate && $_GET['date'] >= $forcedDate)
       {
echo "NEW\n";
       }
}

Obrazek
Link do komentarza
Udostępnij na innych stronach

@Cubixmeister

1. Zrobione

2. Zrobione - nie wiem gdzie dokładnie powinny być.. ja tam nigdy tego nie oddzielam ;d

3. Jak to zrobić? ; d

4. Dlaczego? ; d

5. Program ma za zadanie być ukrytym "antycheatem", więc gdy np. cheater nie zauważy nowszej wersji.. zostanie zbanowany na starym cheacie już wykrywalnym przez nowszą wersje, dlatego nie chcę, by sobie to sami ściągali ;]

To co dalej napisałeś:

Dobra, ale gdzie to tu poda ścieżkę, nazwę pliku i ewentualnie inne parametry?

 

Dzięki za odpowiedź,

Pozdrawiam,

Defozo

Link do komentarza
Udostępnij na innych stronach

1. Wyciąłeś definicje klasy, a nie podzieliłeś system na warstwy... Nie wrzuca się kodu od tak w interfejs. Interfejs tylko wywołuje metody back-endu...

2. OK

3. synapse.ararat.cz, moduł HttpSend

4. Bo to łatwiejsze i dokładniejsze rozwiązanie, możesz sobie na luzie zrobić nawet co do minuty...

5. "Ukryty" soft pisany na komponentach i formatce? LMAO :lol: Tego to już się w ogóle tak nie robi :D

 

Scieżka do skryptu jest zrobiona na stałe, zmień sobie tam "SRV_SCRIPT" na co ci pasuje i ewentualnie nazwę pliku.

Scieżkę do pliku, który masz pobierać można wrzucić do następnej lini pliku zwracanego przez skrypt, albo ustalić na stałe coś w stylu "SRV_SCRIPT + '/update.bin"

Z takimi problemami ten anitcheat nie będzie zbyt skuteczny, GameGuarda ludzie bez większych problemów łamią, więc takie zabawy są lekko bezsensu. Poszukaj czegoś co się wbija jako rootkit do kernela i zabezpiecza na tym etapie - inaczej wszystko da się naprawdę łatwo złamać. Jestem w temacie, bo pracuje aktualnie nad systemem casuali via net i zależy nam, żeby nie grały automaty...

Obrazek
Link do komentarza
Udostępnij na innych stronach

Dobra, najpierw zróbmy coś prostrzego, a później martwmy się o rootkita (chyba, że to się łatwo zrobi).

3. Dobra, ściągnąłem i co teraz?

4. Ale czy łatwiejsze? ;]

5. Noo.. inaczej nie umiem ;s, ale przecież i tak go nie widać ; p

 

Dalej:

Dobra, dobra.. teraz albo się zajmujemy tym moim u góry /\/\/\ skryptem, albo robimy super pro anticheat...

Mógłbyś to jakoś łopatologicznie wytłumaczyć? ; d

 

P.S A GameGuarda łamią tylko dlatego, że Ci co go stworzyli mało update'ów robią.. ;]

 

Help me,

Defozo

Link do komentarza
Udostępnij na innych stronach

3. Wrzuć sobie gdzieś i dodaj do LibPath w środowisku...

4. Prostrze, chyba widać po ilości kodu... Łatwość to rzecz względna...

5. To się naucz, albo sobie odpuść i dalej kalecz ; p

 

Z twoim kodem nie chce mi się użerać...

W kodzie który ci podałem podmień sobie SRV_SCRIPT na adres serwera, wyniki funkcji: 0 = OK; 2 = NEW; 3 = FORCED; -1 = Błąd

W samym skrypcie musisz sobie zmienić daty odpowiednio...

 

Dostałeś praktycznie gotowca - ogólnie więcej ci nie pomogę.

Co do GameGuarda to trudno mi traktować poważnie zdanie kogoś kto robi pobieranie updateów na trzech instancjach THTTP wrzuconych na formatkę...

Obrazek
Link do komentarza
Udostępnij na innych stronach

  • 3 years later...
  • 2 weeks later...

Nie jestem archeologiem :) Po prostu sam szukałem kiedyś tematów autoaktualizacji programów i wiem że jest ciężko takie coś wykonać. Postanowiłem więc sam napisać i udostępnić innym moje rozwiązanie, a nóż komuś się przyda. Mogłem oczywiście cały artykół który zamieściłem na swojej stronie tu wklepać ale nie ma sensu. Może ktoś powiedzieć, że to jest artykuł przed potopowy, ale nie moja wina, że wyszukuje go w googlach więc jest popularny. Skoro jest popularny mimo tego że od 2009 roku nikt nic na nim nie napisał to znaczy, że ludzie nadal szukają rozwiązania do automatycznej aktualizacji własnych programów. Skoro tak jest, to w jaki inny sposób mogę pomóc im w znalezieniu tego czego szukają. Dlatego napisałem tu posta, nie żeby zwiększyć sobie odlądalność strony, tylko żeby pomóc tym którzy tej pomocy szukają. Jak bym chciał spamować to wrzucał bym wszędzie gdzie się da ten post, niezależnie od tematu. Mam nadzieję, że Guru się nie obrazi na mnie.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...