Implementarea corectă a programului de actualizare - depășirea stivei în limba rusă

A întrebat o astfel de întrebare ca implementarea programului de actualizare automată. Principiul este că utilizatorul execută programul, atunci programul nostru funcționează - dacă versiunea acestui program, de exemplu, 1.0. dar deja există 1.1. apoi programul descarcă noua versiune și repornește programul, ca urmare programul este proaspăt.







După cum cred: pe server există un fișier version.txt (cred că este posibil și XML, deși va fi mai dificil de procesat). Programul nostru verifică versiunea de fiecare dată când pornește. Citiți fișierul version.txt folosind c ++ (dacă este posibil, fără a descărca fișierul) și comparați-l cu versiunea curentă (variabila obișnuită). Dacă versiunile sunt aceleași, atunci continuăm programul. În caz contrar - și există multe opțiuni, putem oferi descărcare, putem forța. Voi selecta încărcarea forțată, adică în mod necesar, sau programul vechi nu va funcționa. Descărcați cea mai recentă versiune a programului și reporniți-l.

Sugerați-vă opțiunile. Poate că algoritmul meu are unele dezavantaje. Spune-mi cât de mult mai bine pentru tine.

P.S. Numai algoritmul, soluția și mijloacele sunt de interes, dacă doriți.

Nu pretinz că am luat decizia corectă, îți voi spune cum sa făcut pentru mine. Când rulați programul la fiecare 4 zile (adesea nu are sens, nu eliberez versiuni noi atât de des) în firul de fundal începe verificarea actualizării (utilizatorul poate porni și manual).

Pe server sunt aceste fișiere.







Programul se referă la serverul unui script special, raportează versiunea sa, numele componentei (am câteva componente care sunt actualizate separat), iar scriptul readuce xml-ul dorit. Există o comparație cu TimeStamp cu versiunea locală a acestui fișier, iar programul afișează utilizatorului oferta de actualizare cu o descriere a modificărilor din noua versiune.

Dacă utilizatorul este de acord, programul se repornește cu drepturile administratorului și descarcă fișierul la DownloadUrl specificat. Verifică hash-ul md5 al arhivei zip și despachetează arhiva într-un dosar temporar. În interiorul arhivei, există un alt fișier xml, care specifică la care foldere doriți să se răspândească fișierele. Înainte de a suprascrie fișierele exe și dll, ele sunt redenumite la * .old. După aceea, programul pornește o nouă versiune cu o cheie specială, astfel încât să puteți face alte acțiuni (de obicei nu este necesară).

Unele componente (care nu conțin fișiere exe) sunt actualizate fără a fi cunoscute de utilizatori.

La abordarea mea sunt dezavantaje, atunci când dezinstalați programul de instalare (InnoSetup), fișierele noi instalate utilizând actualizarea automată nu sunt șterse.

Deși, probabil, pentru actualizarea exe ar fi mai corect să descărcați instalatorul și să îl instalați într-un mod liniștit, dar sunt prea leneș să remodelez. Îmi place cum actualizarea se face prin browsere (google chrome, etc.), programul este actualizat în sine, iar utilizatorul nici nu observă. Dar, de dragul acestui lucru, programul este instalat în folderul utilizatorului, nu în fișierele programului. Și dacă nu mă înșel, Google are o actualizare incrementală, adică În loc de un magazin imens de 100 mb, se descarcă un diff mic.

Dar pentru a renunța la sistemul de actualizare încorporat, nu văd punctul, programul meu (Image Uploader) ar trebui să actualizeze adesea suportul de găzduire, care se schimbă adesea, este o necesitate vitală. Actualizarea site-urilor de găzduire cântărește aproximativ 50 kb, iar programul în sine este de 5 MB.

P.S. Pentru a interzice utilizatorilor să utilizeze versiuni vechi ale programului este prostie. Încerc să mențin compatibilitatea cu versiunile mai vechi la o limită rezonabilă.







Articole similare

Trimiteți-le prietenilor: