Program patch

Program patch
2006-05-05T07:58:48+02:00
2006-05-05T23:14:34+02:00
2022-10-30T14:31:16+01:00
blond72
Sziasztok !

Kérdésem a következő lenne: hogyan tudnám megoldani azt, hogy a programom elindulása után egy hálózati könyvtárban talált frissítést automatikusan telepítsen. A programom egy hálózatos környezetben működő, firebird adatbázisra épülő alkalmazás. Jelenleg tesztelés alatt van és a felmerülő hibákat szeretném ilyen módon javítani.
Mutasd a teljes hozzászólást!
Szia!

Én nemrég csináltam egy ilyet, és a következőképpen oldottam meg:

1. A távoli állomány verzióját megnézem a következő módon:

GetClientVersion(File_Dir + '\PROGRAM.EX_')

Ez visszaadja a verziót, amit a Delphi-vel pakolok bele (pl. "1.2.1.1")

2. Ha frissiteni kell, akkor letöltöm a programot pl. UPDATE.EXE néven, és elindítom spec. paraméterrel, amelyben benne van a jelenlegi processID-m:

params := params + ' -p=' + IntToStr(GetCurrentProcessID); ShellExecute(0, 'open', PAnsiChar(File_Dir + '\update.exe'), PAnsiChar(params), nil, 0);

3. A programom induláskor megnézi, hogy van-e "-p" paraméter, és ha van, akkor
addig várakozik, amig a process be nem záródik:

phandle := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID); repeat Sleep(1); until not GetExitCodeProcess(phandle, exitcode) or (exitcode <> STILL_ACTIVE);

4. Saját magát rámásolja a hívó EXE-re, majd kilép.
Mutasd a teljes hozzászólást!

  • Átnevezed önmagadat, átmásolod az új fájlt, elindítod az új exe-t, kilépsz.
    Programinduláskor megnézed, hogy van e átnevezett fájl, és törlöd, ha talált.
    Mutasd a teljes hozzászólást!
  • Én úgy szeretném, hogy elindul a program, megnézi van e frissítés, ha van akkor gondolom leállítja magát, elindítja a frissítést, majd esetleg újraindul a program.
    Mutasd a teljes hozzászólást!
  • Ha megvan hogy szeretnéd, akkor mi a gond?
    Mutasd a teljes hozzászólást!
  • Program frissítése:
    DM.UpDir= Frissítési könyvtár a hálózaton.
    procedure TDM.DataModuleCreate(Sender: TObject); var forras,cel:string; F,G:file; begin Forras:=DM.UpDir+ExtractFileName(application.exename); Cel:=application.exename; if Fileexists(forras) and Fileexists(Cel) then begin if FileAge(Forras)>FileAge(cel) then begin AssignFile(F, application.exename); AssignFile(G, application.exename + '.old'); if FileExists(application.exename + '.old') then Erase(G); Rename(F, application.exename + '.old'); if not copyfile(PChar(Forras),PChar(Cel),FALSE) then raise Exception.Create('Másolási hiba!') else FrmMessDlg.Close; DM.MesDlg(3,'A program frissítést talált és frissítette önmagát!'+#13+#10+ 'A program futása most befejeződött..'); Application.Terminate; end; end;

    Nem bizti, hogy tökéletes, mert úgy vágtam ki a progimból. Az viszont bizti, hogy nekem műxik...
    Mutasd a teljes hozzászólást!
  • Szia!

    Én nemrég csináltam egy ilyet, és a következőképpen oldottam meg:

    1. A távoli állomány verzióját megnézem a következő módon:

    GetClientVersion(File_Dir + '\PROGRAM.EX_')

    Ez visszaadja a verziót, amit a Delphi-vel pakolok bele (pl. "1.2.1.1")

    2. Ha frissiteni kell, akkor letöltöm a programot pl. UPDATE.EXE néven, és elindítom spec. paraméterrel, amelyben benne van a jelenlegi processID-m:

    params := params + ' -p=' + IntToStr(GetCurrentProcessID); ShellExecute(0, 'open', PAnsiChar(File_Dir + '\update.exe'), PAnsiChar(params), nil, 0);

    3. A programom induláskor megnézi, hogy van-e "-p" paraméter, és ha van, akkor
    addig várakozik, amig a process be nem záródik:

    phandle := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID); repeat Sleep(1); until not GetExitCodeProcess(phandle, exitcode) or (exitcode <> STILL_ACTIVE);

    4. Saját magát rámásolja a hívó EXE-re, majd kilép.
    Mutasd a teljes hozzászólást!
  • Mindkét megoldás tetszik, mindjárt kipróbálom őket. Köszönöm a segítséget.
    Mutasd a teljes hozzászólást!
  • Bocs NetWattid, ezt elszúrtam, neked akartam adni a pontot, de mellényúltam, lehet valahogy korrigálni ? Egyébként mindkét megoldás jó, de a tieddel indultam el először és azzal sikerült is megcsinálni. Nagyon köszönöm mindkettőtöknek.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd