75 votes

Comment mettre en place une mise à jour automatique ?

De nombreux programmes comprennent une mise à jour automatique, c'est-à-dire que le programme recherche occasionnellement des mises à jour en ligne, puis télécharge et applique les mises à jour trouvées. Les bogues du programme sont corrigés, les fichiers de support sont modifiés et les choses sont (généralement) améliorées.

Malheureusement, j'ai beau chercher, je ne trouve nulle part d'informations sur ce processus. Il semble que les mises à jour automatiques qui ont été mises en œuvre étaient soit propriétaires, soit considérées comme non importantes.

Il semble assez facile de mettre en œuvre le système qui recherche les mises à jour sur un réseau et les télécharge si elles sont disponibles. Cette partie de l'outil de mise à jour automatique changera considérablement d'une mise en œuvre à l'autre. La question est de savoir quelles sont les différentes approches de appliquant correctifs. Il suffit de télécharger des fichiers et de remplacer les anciens par de nouveaux, d'exécuter un script de migration qui a été téléchargé, de singer script des parties du système, etc. Les concepts sont préférables, mais des exemples en Java, C, Python, Ruby, Lisp, etc. seraient appréciés.

6 votes

J'ai consulté le site de Google omaha . C'est peut-être quelque chose à voir si vous êtes toujours intéressé (4 ans plus tard ).

54voto

Ken Paul Points 2398

Je pense que la notion d'"agnosticité linguistique" sera un facteur limitant dans ce cas. Les applications ont tellement de formes et de tailles différentes qu'il n'existe pas de réponse unique. J'ai mis en œuvre plusieurs programmes de mise à jour automatique dans plusieurs langues, et aucun n'était semblable à l'autre.

La philosophie la plus générale est que l'application vérifie auprès d'un site d'origine (adresse web, requête web, site du réseau d'entreprise, etc.) si sa version est à jour ou quelle est la version la plus récente. Si la réponse appelle une mise à jour, le processus sera différent pour chaque situation.

Une alternative populaire consiste à inviter l'emplacement d'origine à exécuter un script lorsque l'application est lancée. Le script peut vérifier la version, télécharger des mises à jour si nécessaire et demander un retour d'information sur l'utilisation, par exemple.

Nous pourrons probablement mieux vous aider si vous limitez les paramètres.

MISE À JOUR : L'approche de "Parcheando" dépend également de la nature de l'application, et il y a une très grande diversité ici. Si vous avez un seul fichier exécutable, par exemple, il est probablement plus pratique de remplacer l'exécutable. Si votre application comporte de nombreux fichiers, vous devriez chercher à minimiser le nombre de fichiers remplacés. Si votre application est fortement personnalisée ou paramétrée, vous devez vous efforcer de minimiser l'effort de remplacement. Si votre application utilise du code interprété (comme une application Excel VBA ou une application MS Access MDB), vous pourrez peut-être remplacer certaines parties du code. Dans une application Java, il se peut que vous n'ayez à remplacer qu'un fichier JAR, voire un sous-ensemble du contenu du JAR. Vous devrez également disposer d'un moyen de reconnaître la version actuelle du client et de la mettre à jour de manière appropriée. Je pourrais continuer ainsi longtemps, mais j'espère que vous voyez ce que je veux dire à propos de la diversité. C'est l'une des nombreuses fois où la meilleure réponse commence généralement par "Eh bien, ça dépend... !". C'est la raison pour laquelle tant de réponses incluent "Veuillez restreindre les paramètres".

21voto

Ants Points 1997

Veillez également à prendre en compte les implications en termes de sécurité de l'aspiration des informations relatives à la mise à jour, ainsi que des binaires de mise à jour eux-mêmes.

Faites-vous confiance à la source du téléchargement ? Vous téléphonez peut-être à votre domicile pour obtenir votre mise à jour, mais que se passe-t-il s'il y a un homme au milieu qui redirige vers un serveur malveillant ? Une connexion HTTPS ou une connexion sécurisée similaire vous aidera, mais il est recommandé de vérifier deux fois les bits que vous téléchargez en utilisant une signature numérique.

8voto

abatishchev Points 42425

Tout d'abord, vous avez besoin d'un fichier sur le site web d'accueil de votre application avec la dernière version. La meilleure façon est d'avoir une table SQL spéciale pour cette tâche et de la remplir automatiquement après la publication d'une nouvelle version / la fin de la construction nocturne. Votre application crée un nouveau thread qui demande un lien http intégré avec la version et la compare avec la version actuelle. En .NET, vous pouvez utiliser un code comme celui-ci :

Version GetLatestVersion() {
HttpWebRequestrequest = (HttpWebRequest)WebRequest.Create(new Uri(new Uri(http://example.net), "version.txt));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (request.HaveResponse)
{
  StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.Default);
  return new Version(stream.ReadLine());
}
else
{
  return null;
}
}

Version latest = GetLatestVersion();
Version current = new Version(Application.ProductVersion);
if (current < latest)
{
  // you need an update
}
else
{
  // you are up-to-date
}

Dans cet exemple, version.php ne contient qu'une chaîne de caractères simple comme 1.0.1.0.

Un autre conseil que je peux donner - comment télécharger une mise à jour. J'aime beaucoup l'idée suivante : dans les ressources de votre application, il y a une chaîne de code CLR que vous compilez à la volée (en utilisant CodeDom) dans un dossier temporaire, l'application principale l'appelle et se ferme. L'Updater lit les arguments, les paramètres ou le registre et télécharge les nouveaux modules. Il appelle ensuite l'application principale qui supprime tous les fichiers temporaires. C'est fait !

(Mais tout ce qui est dit ici concerne .NET)

6voto

Cd-MaN Points 7911

La solution la plus simple (utilisée par de nombreux programmes) consiste à exécuter le programme de désinstallation de la version précédente et le programme d'installation de la nouvelle version (en sautant éventuellement les questions auxquelles l'utilisateur a déjà répondu, comme le CLUF). Le seul problème est que la nouvelle version doit pouvoir lire les options de configuration de l'ancienne version.

De plus, sous Windows, vous ne pouvez pas supprimer un fichier exécutable en cours d'utilisation, vous voudrez donc probablement placer un petit exécutable dans le dossier Temp, qui exécute l'ensemble du processus, puis le supprimer à la fin de l'instance de la nouvelle version qui a été lancée (ou simplement l'enregistrer pour qu'il soit supprimé au prochain redémarrage ).

14 votes

Si vous ne pouvez pas supprimer un EXE en cours d'utilisation, vous pouvez le renommer - demandez donc à l'instance en cours d'exécution de se renommer elle-même, d'insérer la nouvelle version et de vérifier l'existence de la version précédente renommée au prochain démarrage, puis de la supprimer.

0 votes

C'est incroyable ! Merci pour le conseil !

2voto

vfilby Points 5975

L'approche la plus simple consiste à demander à votre programme d'interroger un serveur (site web) pour voir s'il y a une mise à jour. S'il y a une mise à jour, vous pouvez afficher un message à l'intention de l'utilisateur qui l'invite à télécharger une version plus récente et lui fournit un lien.

Une autre solution, plus complexe, consisterait à créer un petit service Windows (ou un démon Unix) qui vérifierait périodiquement s'il existe des mises à jour, ce service pourrait télécharger la mise à jour et lancer le programme d'installation.

L'architecture générale consiste à disposer d'un serveur central contrôlé par l'utilisateur qui connaît la dernière version et sait où l'obtenir. Les programmes interrogent alors le serveur. Je ne vais pas inclure d'exemple de code car il dépend fortement du serveur et du format que vous choisissez. Ce n'est cependant pas très difficile.

0 votes

La question que je voulais poser (j'ai modifié la question en conséquence) est la suivante : comment les correctifs sont-ils appliqués ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X