ClapMAJ - Utilisation

De Wiki de Lapalys
Aller à la navigation Aller à la recherche

Le fichier INI

Une partie du composant utilise des données extérieures pour fonctionner, notamment pour les chemins d'accès aux fichiers à jour. Pour cela, il a été fait le choix d'utiliser un fichier INI dans lequel tous les paramètres se trouvent sous la section [Update]. La structure des données attendues est expliquée ci-dessous. La connexion HTTP peut utiliser un proxy.

[Update]

Folder = NomDeVotreRépertoire


HTTP = NomDeVotreServeurHTTP (*)

HTTPUser = NomUtilisateurServeurHTTP (*, optionnel)

HTTPPass = MotDePasseServeurHTTP (*, optionnel)

HTTPTimeOut = TimeOutServeurHTTP (en millisecondes, optionnel, par défaut = 5000)

HTTPPing = 1 ou 0 (1 = un ping du serveur se fera avant toute connexion, optionnel, par défaut = 1)


Proxy = NomDeVotreServeurProxy (*)

ProxyUser = NomUtilisateurServeurProxy (*, optionnel)

ProxyPass = MotDePasseServeurProxy (*, optionnel)

ProxyPort = PortDeConnexionProxy (optionnel, par défaut : 8080)


FTP = NomDeVotreServeurFTP (*)

FTPUser = NomUtilisateurServeurFTP (*, optionnel)

FTPPass = MotDePasseServeurFTP (*, optionnel)

FTPPort = PortDeConnexionFTP (optionnel, par défaut : 21)

FTPActive = 1 ou 0 (type de connexion FTP : 1=active et 0=passive, optionnel, par défaut = 0)

FTPTimeOut = TimeOutServeurFTP (en secondes, optionnel, par défaut = 20)

FTPPing = 1 ou 0 (1 = un ping du serveur se fera avant toute connexion, optionnel, par défaut = 1)


Les informations sensibles (marquées d'une étoile) peuvent être cryptées dans le fichier INI. Pour écrire dans le fichier INI les informations cryptées, utilisez la code suivant dans votre programme (les deux derniers paramètres ont de l'importance) :

MonParamètre est une chaine = Crypte(MaValeurNonCryptée,MonMotDePasse,crypteRapide,encodePCS)

Le mot de passe MoMotDePasse utilisé devra alors être passé en paramètre de la déclaration de la classe.

Téléchargement en tâche de fond

Pour que le composant puisse télécharger en tâche de fond, des threads sont utilisés (en HTTP et FTP). Le nom du thread est paramétrable dès l'appel de la classe (voir les entrées-sorties du composant). Les threads sont automatiquement fermés si le logiciel s'arrête ou si l'instance de la classe est fermée ou libérée.

Du fait de l'utilisation des threads, il est conseillé de mettre la ligne suivante dans l'initialisation de votre projet :

ThreadMode(threadSectionCritique)

État du téléchargement en temps réel

La méthode :bÉtatDeLaMAJ() permet de connaître le statut d'un fichier dont la mise à jour a été demandée via une instance de la classe ClapMAJ. Cette méthode peut, par exemple, être appelée dans une procédure lancée au démarrage d'une fenêtre. Pour cela, dans la procédure, ouvrez la fenêtre "automatisme de la procédure" (icône 1:30 dans le titre de la procédure) et cochez l'option "Exécution en tâche de fond" et "Sans utilisation de Hyper File" dans le bas de cette fenêtre.

Si cette fonctionnalité est utilisée, merci de vous reporter au paragraphe précédent pour l'instruction ThreadMode() sous peine de voir l'affichage du statut s'arrêter.

Exemple de code : La procédure ci-dessous est locale à une fenêtre et permet d'afficher l'état de la mise à jour du logiciel dans un champ de saisie (SAI_MAJ).

PROCEDURE AfficheMAJ()
sNomExe est une chaîne = fExtraitChemin(ExeInfo(exeNom),fFichier+fExtension)
nÉtatCourant est un entier = clapMAJ::_MAJPasEncoreVérifiée
sFichierINI est une chaîne = fRepExe()+"\monlogiciel.ini"
sPasseIni est une chaîne = "12345"	//à configurer avec votre propre mot de passe si vous cryptez les données sensibles
sRépertoireMAJ est une chaîne = fRepertoireTemp()
cMAJ est un objet clapMAJ(sFichierINI,sPasseIni,sRépertoireMAJ)
nÉtatMAJ est un entier
BOUCLE
	nÉtatMAJ=cMAJ:nEtatDeLaMAJ(sNomExe)
	SI nÉtatMAJ<>nÉtatCourant ALORS
		SELON nÉtatMAJ
			CAS clMAJ::_MAJEnVérif : SAI_MAJ=gImage("MAJ_16_1.png")+" Vérifie mise-à-jour..."
			CAS clMAJ::_MAJÉchouée : SAI_MAJ=gImage("MAJ_fail_16_1.png")+" Erreur de mise-à-jour"
			CAS clMAJ::_MAJExisteSurFTP,clMAJ::_MAJExisteSurHTTP,clMAJ::_MAJExisteEnLocal : SAI_MAJ=gImage("MAJ_16_1.png")+" Mise-à-jour disponible"	
			CAS clMAJ::_MAJEnCoursDeRéception : SAI_MAJ=gImage("MAJ_16_1.png")+" Mise-à-jour en réception"
			CAS clMAJ::_MAJPrête : 	SAI_MAJ=gImage("MAJ_16_1.png")+" Mise-à-jour prête"
			AUTRE CAS : SAI_MAJ=""
			
		FIN
		nÉtatCourant=nÉtatMAJ
	SINON
		SI PAS nÉtatMAJ DANS (clMAJ::_MAJEnVérif,clMAJ::_MAJExisteSurFTP,clMAJ::_MAJExisteSurHTTP,clMAJ::_MAJExisteEnLocal,clMAJ::_MAJEnCoursDeRéception,clMAJ::_MAJPrête) ALORS
			SAI_MAJ=""
		FIN
	FIN
	ThreadPause(15)
FIN

Multi-fichiers

Cette classe est développée pour la mise-à-jour de plusieurs fichiers. En effet, en utilisant une ou plusieurs instances de la classe, l'on peut appeler plusieurs fois la méthode nVérifieSiExiste() avec, en paramètre, le nom d'un fichier. Tous les appels de cette méthode mettra dans une mémoire, partagée entre toutes les instances de la classe, le nom des fichiers appelés et leur état en temps réel. Dans le cas où le même fichier est appelé, son statut repasse en clMAJ::_MAJPasEncoreVérifiée et une nouvelle vérification commence. Le nom d'un fichier n'existe qu'une seule fois en mémoire.

Ceci est notamment utile lorsqu'on veut mettre à jour l'exécutable et ses dll. Dans ce cas, l'on ne peut pas remplacer ces fichiers tant qu'ils sont en exécution. Il est alors proposé la méthode suivante :

  • appeler nVérifieSiExiste() de l'exécutable en cours
  • appeler ensuite, pour toutes les dll, la même méthode de classe
  • appeler enfin la méthode bApplique() avec l'option "bTout" = 1 pour que la classe ferme le programme, copie les versions récentes de l'exécutable et de ses dll dans le répertoire d'exécution et relance le programme après (si demandé par l'option bRelance = 1).

En tout temps, on peut lire l'ensemble des fichiers demandés et leur état grâce à la méthode :sListeMAJ(). L'on peut aussi vider cette mémoire en utilisant la méthode :ListeSupprimeTout() ou supprimer un seul fichier de cette mémoire grâce à la méthode :ListeSupprime(NomDuFichier).

Critères de mise-à-jour

Le composant, pour éviter d'utiliser des fichiers annexes (comme un WDUpdate.NET), compare des informations du fichier à mettre à jour avec le fichier distant (qu'il soit sur HTTP, FTP ou dans un répertoire). Si une différence de date, d'heure ou de taille est détectée en comparant ces deux fichiers, la méthode :nVérifieSiExiste renverra la valeur ::_MAJPrête ou commencera à télécharger le fichier.

Contraintes techniques

Puisque la mise-à-jour de l'exécutable se fait par simple copie de la version plus récente dans le répertoire d'exécution, il est possible de les droits de l'utilisateur qui déclenche l'opération ne soient pas suffisant. La copie va alors échouer et l'ancienne version réapparaîtra.

Pour éviter cela, il est nécessaire que l'utilisateur ait les droits administrateurs sur l'ensemble du répertoire du logiciel (au cas où plusieurs fichiers seraient mis-à-jour).

De même, la plupart des anti-virus vont se déclencher après que le logiciel ait été relancé. Ceci est normal puisqu'un exécutable a été changé. L'utilisateur doit donc avoir le droit d'accepter la boîte de dialogue permettant à l'anti-virus de mettre la nouvelle version du logiciel dans sa liste de confiance.

Pour tous les autres fichiers, aucune contrainte particulière à signaler.