Bonjour à tous,
Je suis à la recherche d'idées/astuces/APIs qui permettraient à une application de se mettre à jour elle-même.
Avant toute chose, je vais planter le décors : tout se déroule dans un réseau local. Un service Web tourne sur un serveur et un client tourne sur toutes les machines clientes en tâche de fond. Le service Web sert à un autre but que la mise à jour mais peu très bien être utilisé pour cela. Le client est composé d'un seul executable.
J'ai actuellement quelques solutions mais je suis certain qu'il y a moyen de faire beaucoup plus propre, robuste et donc, "professionnel" :
1 [Savoir si l'application a été mise à jour]
* J'appele tous les X temps une méthode de mon service web qui permet de savoir si l'application a été mise à jour.
=> Inc. : il faut vérifier tous les X temps pour la mise à jour alors qu'elle n'arrivera qu'une fois de temps en temps, mais il est nécessaire qu'elle soit appliquée le plus vite possible.
ou
* Je fais un hash md5 ou autre de mon fichier local et du fichier partagé sur le réseau afin de voir s'ils sont identiques ou non.
=> Inc. : identique à celui-ci dessus dans le sens où je dois vérifier tous les X temps si le fichier n'a pas changé. De plus je dois avoir un accès en lecture à la nouvelle version du client sur le serveur, ce qui n'est pas nécessairement le cas.
2 [Auto-Update de l'application]
* Je lance un 2eme executable à partir de mon client.
* Je quitte mon client
* Le 2eme executable attend la fin du client.
* Il écrase l'ancien client par le nouveau.
* Il relance le client.
* Il se ferme.
=> Inc. : J'ai obligatoirement besoin d'un 2eme executable
ou
* Je crée un fichier .bat qui permet d'écraser l'ancien client par le nouveau et de relancer le client
* Je lance le .bat
* Je quitte le client
* Le .bat ecrase le client, le relance et se ferme.
=> Inc. : Il y aura une fenêtre affichée (il y a pe moyen avec la classe process de ne pas afficher la console, je ne sais pas). De plus il n'est pas certain que le .bat ne rencontrera pas un problème si le client n'a pas eu le temps de se fermer avant que le .bat ne cherche à l'écraser.
Voilà, je ne sais pas si c'est très clair ou si vous possédez d'autres solutions, mais dans tous les cas merci de vous intéresser à mon problème.
Nicolas
Partager