WD14 - Mise à jour automatique d'une application

Le
Michel
Bonjour,

J'ai placé une application sur un serveur web pour permettre aux
utilisateurs de la télécharger puis de l'installer chez eux. Dès
qu'ils lancent leur application et qu'une mise à jour est disponible
sur le serveur, les utilisateurs ont la possibilité d'en bénéficier.
Aujourd'hui, je souhaite changer le serveur qui sert au
téléchargement.
Comment faut-il procéder pour que cela soit transparent pour les
utilisateurs ?
Est-ce qu'il est possible de préciser dans l'exe de la dernière
version disponible sur le serveur A que dorénavant les mises à jour
seront sur le serveur B ?
Merci d'avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alex
Le #20320821
Sur un projet perso, je me suis fait un auto-update maison :
-check d'un fichier INI par http toutes les minutes
-si la version a changé lecture des URL de téléchargement dans le m ême
fichier
-permet de changer facilement de serveur et mettant simplement à jour
mon fichier INI
-en plus les aides sont sur le site web, et les URL sont dans le
fichier INI
-donc je peux changer les URL des aides à tout moment
-affichage d'un bouton mise à jour
-clic utilisateur
-simple lancement de téléchargement (toujours HTTP avec
lanceappliassociée)

Actuellement 3.000.000 de requêtes sur ce fichier.
Ça me me permet d'avoir une stat sur l'utilisation du logiciel au
passage.

Cordialement.
Gilles
Le #20324031
Dans son message précédent, Alex a écrit :
Sur un projet perso, je me suis fait un auto-update maison :
-check d'un fichier INI par http toutes les minutes



Dans un thread séparé?
Alex
Le #20324661
Non dans un timer lancé par une classe au démarrage du projet :

cApplication::gbTimerPrincipal()

Et dedans tu mets les trucs à faire :
-toutes les minutes
-toutes les heures, etc...

Sinon tu lances un timer dans la fenêtre principale.

Ça devrait aussi marcher avec un thread.
Mais j'ai pas voulu me compliquer la vie.
Alex
Le #20324811
PROCEDURE PRIVÉE GLOBALE gbTimer()

::ghHeure = HeureSys()

nSec est un entier
sOk est une chaîne
sTrace est une chaîne

nSec = 60
sOk = PartieDécimale(::ghHeure..Seconde/nSec)

// Update toutes les 60 secondes
SI sOk="0" ...
ET (FenEtat(cApp::gsFenPrinc)<>Inexistant) ALORS // Fenêtre existe
SI cApp::gsFenPrincþnEnCours() ALORS // Fenêtre active
::gbUpdateDetecteHttp()
FIN
FIN
Alex
Le #20324801
PROCEDURE GLOBALE gbUpdateDetecteHttp(LOCAL bForce est un
booléenúux)

oHt est un cHttp

SI ::gbUpdateAfficher OU bForce ALORS
SI oHt:mbRequete(::gsVarUpdateIni, ::gsVarUpdateIniLocal) ALORS //
Requete HTTP

// Variables site
::gbInitialiseIni(Vrai) // UPDATE.INI

FIN
FIN
Alex
Le #20324791
PROCEDURE GLOBALE gbInitialiseIni(LOCAL bAfficheMisesAJour est un
booléenúux)

oIni est un cIni
oIni:mbIniInitialise(::gsVarUpdateIniLocal)

// URL Fichier de MAJ
::gsVarUpdateIni = oIni:msIniLit("INI", "URL")

// Version officielle
::gsVarOffVersion = oIni:msIniLit( "UPDATE", "VERS")
::gsVarOffInfo = oIni:msIniLit( "UPDATE", "INFO")
::gsVarOffInstall = oIni:msIniLit( "UPDATE", "CLAS")
::gsVarOffUsbZip = oIni:msIniLit( "UPDATE", "USBZ")
::gsVarOffUsbZipAuto = oIni:msIniLit( "UPDATE", "USBA")
::gsVarOffFrameWork = oIni:msIniLit( "UPDATE", "FRAM")

// Version Beta
::gsVarBetaVersion = oIni:msIniLit( "BETA", "VERS")
::gsVarBetaInfo = oIni:msIniLit( "BETA", "INFO")
::gsVarBetaInstall = oIni:msIniLit( "BETA", "CLAS")
::gsVarBetaUsbZip = oIni:msIniLit( "BETA", "USBZ")
::gsVarBetaUsbZipAuto = oIni:msIniLit( "BETA", "USBA")
::gsVarBetaFrameWork = oIni:msIniLit( "BETA", "FRAM")


SI bAfficheMisesAJour ALORS
::gbUpdateTrouveeOff = (cApp::gsVarOffVersion>cApp::gsExeVersion)
::gbUpdateTrouveeBeta = (cApp::gsVarBetaVersion>cApp::gsExeVersion)
FIN

RENVOYER Vrai
Alex
Le #20324781
Je ne me suis pas pris la tete :
-requete HTTP
-écriture du résultat dans un ini local
-lecture des variables avec inilit
-actions en fonction des variables trouvées

:)
Alex
Le #20324771
gbTimer utilise un timer automatique de WD
Alex
Le #20325051
Je check les mises à jour uniquement
si l'utilisateur est sur la fenêtre principale.

Pas besoin de plus dans mon cas.
Alex
Le #20325041
Toutes les fonctions W-Langage sont encapsulées dans des classes.
Ça fait un code plus court et un tuning global au niveau de l'appli.

Exemple :

Dans toutes les classes j'utilise des affichages Jauge
dans la barre de titre de l'appli.

Chaque classe affiche des messages :
progression, ok ou echec, erreur, téléchargement, lit, écrit, etc...

Chaque classe gère les erreurs, ex. :
-tu retires la clé USB
-l'appli n'a plus accès aux fichiers
-au lieu de planter elle va te dire de remettre la clé USB
-et continuer à fonctionner en mode déconnecté
-etc...

Voila :)
Publicité
Poster une réponse
Anonyme