L'écriture de ma propre mise à jour Automatique
Lors de l'écriture de ma propre mise à jour automatique, il est un cadre général que je devrais suivre?
Il y a un moment j'ai été lire sur la façon de créer un 'boot strapper" qui se charge en premier, et le principal de l'application (depuis l'exécution d'un appilation ne peut pas être mis à jour en raison de verrous de fichier, etc.)
Donc des conseils et des pratiques exemplaires pour cela?
Vous devez vous connecter pour publier un commentaire.
Vous aurez probablement à écrire votre propre. Comme POUR mentionné, l'idée de base est de mettre la dernière version de votre programme (je suis en supposant un EXE) sur le serveur, et ensuite votre demande de vérifier avec le serveur, lorsqu'il démarre, et de télécharger l'EXE à partir du serveur si c'est une version plus récente.
Habituellement, j'ai mis en œuvre ce qu'un service web que l'application appelle au démarrage. Quelques avertissements au sujet de cette approche:
La méthode de service web a besoin pour obtenir le numéro de version de l'exécutable sur le serveur et de le comparer à la version numéro de l'appelant. Si vous utilisez l'Assemblée de la classe de lire le numéro de version du serveur EXE, cela permettra de verrouiller le fichier pour aussi longtemps que l'instance de service web est en cours d'exécution (au moins 20 minutes). Comme un résultat, vous pouvez parfois avoir de la difficulté à remplacer l'EXE sur le serveur avec une version plus récente. Utiliser le AssemblyName classe au lieu - cela vous permet de lire l'assemblée info sans chargement de l'assemblée (et la fermeture).
L'appelant application ne peut pas remplacer son propre fichier de la nouvelle version, vous ne pouvez pas supprimer ou mettre à jour une application en cours d'exécution de fichier. Ce qu'il peut faire, cependant, est de renommer son propre fichier lors de l'exécution. Donc, l'astuce sur un auto-mise à jour de l'application pour renommer lui-même (par exemple, "MyApplication.exe" pour "MyApplication_OLD.exe"), télécharger la nouvelle version dans le dossier de l'application (nommé "MyApplication.exe"), d'avertir l'utilisateur qu'une mise à jour a eu lieu qui nécessite un redémarrage de l'application, puis fin. Lorsque l'utilisateur redémarre l'application, il sera la version la plus récente qui commence - cette version recherche et supprime l'ancienne version.
Faire une mise à jour automatique qui redémarre automatiquement l'application après une mise à jour comme c'est très difficile (il implique le coup d'envoi d'un autre processus et, en terminant son propre processus avant le redémarrage automatique du processus de coups de pied dans). Je n'ai jamais eu l'utilisateur se plaignent d'avoir à redémarrer l'application.
Ok, tout d'abord, si l'un des programme d'installation/de mise à jour des produits sur le marché correspond à votre besoin, vous devriez probablement utiliser ces.
Cela étant dit, j'ai eu le plaisir de construire un système comme ça moi il n'ya pas longtemps.
Oui, notre programme d'installation/de mise à jour comprenait deux parties, côté client, de sorte que:
~ La partie A de se connecter à des serveurs sur lesquels la version la plus récente est stocké et publié; si une version plus récente de la Partie B, les télécharger et un coup de pied hors
~ Partie B mettrait l'accent sur l'installation/la mise à jour de l'application elle-même (et peut télécharger et installer les mises à jour de la Partie A).
Mis à part cela, je recommande toujours les 4 opérations dans le programme d'installation/de mise à jour:
D'installer et de Désinstaller
Mise à jour et Restauration (c'est à dire l'annulation de la dernière mise à jour)
La Restauration est essentielle lors de vos utilisateurs disposent d'un système qui met automatiquement à jour pour la nuit.. si une mise à jour tous les mess up, ils peuvent de restauration et de continuer à travailler tout en vous résoudre le problème.
Enfin, le programme d'installation/de mise à jour devrait essayer d'être agnostique à propos de l'application, il installe et met à jour, de sorte que, lorsque cette modification de l'application, le programme d'installation/de mise à jour système est affectée le moins possible.
J'ai codé un programme de mise à jour pour une application, j'ai travaillé en C++, mais la structure générale serait la même.
Cela a fonctionné assez bien pour nous, et comme il l'a toujours téléchargé un nouveau "programme de mise à jour" que la première chose qu'il a fait, nous pourrions traiter certains funky de nouvelles choses qui pourraient ne pas fonctionner autrement.
Écrit notre propre mise à jour automatique du logiciel. Voici donc mon conseil... Ne pas le faire!! Bien-sûr tout cela dépend de votre situation, mais ici sont les problèmes que ma société rencontrées:
Le problème avec notre logiciel, c'est que nous avons besoin de beaucoup de flexibilité et de soutien sur toutes les plateformes Windows. La solution que nous avons écrit a bien fonctionné, mais n'était pas et a commencé à échouer lorsque les versions de Windows a changé ou n'étaient pas tout à fait comme ceux de notre laboratoire. Nous avons finalement acheté le logiciel et je vous recommande de faire de même. Si vous êtes intéressés, nous avons acheté un produit appelé AutoUpdate+ (texte du lien).
Voici une solution open-source que j'ai écrit pour répondre à des besoins spécifiques, nous avions pour WinForms et WPF apps. L'idée générale est d'avoir la plus grande flexibilité, à la plus faible surcharge possible.
Donc, intégration est super-facile, et la bibliothèque fait à peu près tout pour vous, y compris la synchronisation des opérations. Il est également très flexible, et permet de déterminer quelles sont les tâches à exécuter et à quelles conditions - faites-vous les règles (ou d'utiliser certains qui le sont déjà). Dernier par pas moins qui est le support de toutes les mises à jour de la source de (web, BitTorrent, etc) et tout format de flux - ce qui n'est pas mis en œuvre, vous pouvez simplement écrire pour vous-même.
Froid mises à jour (nécessitant un redémarrage de l'application) est également pris en charge, et fait automatiquement, sauf si "hot-swap" est spécifié pour la tâche.
Ce boild bas à une DLL, moins de 70kb taille.
Plus de détails à http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/
Code est à http://github.com/synhershko/NAppUpdate (Concédé sous licence Apache 2.0)
J'ai l'intention de l'étendre de plus quand je vais avoir plus de temps, mais honnêtement, vous devriez être en mesure de rapidement améliorer vous-même pour ce qu'elle ne dispose actuellement pas en charge.
ClickOnce ne fonctionne pas bien pour nous. Nous avons installer la base de données sur notre serveur du client. La base de données sur la fin de leur besoin d'être mis à jour avant de nous faire une mise à jour. Nous avons beaucoup plus que juste 2 ou 3 clients, afin de faire ClickOnce pour notre application n'est pas vraiment la meilleure idée, sauf si je suis absent quelque chose d'important à propos de ClickOnce.
Ce que j'ai fait, a été d'ajouter un champ dans la base de données de numéro de version. Sur notre site ftp, j'ai un dossier de versions qui a un dossier pour chaque numéro de version de notre application. À l'intérieur de cette version particulière du dossier, nous avons mis un fichier zip avec le setup.exe et le fichier msi que l'setup.exe va lancer. Tous les pré-reqs sont téléchargés à partir du site des vendeurs de s'assurer que notre site FTP n'est pas se faire frapper avec des énormes téléchargements (.Net 3.5 lorsque nous avons déménagé à elle). Lors de notre application se lance, il vérifie le champ dans la base de données pour le numéro de version, et si c'est différent de la version actuelle version de l'assembly, il va se connecter au site ftp, téléchargez le fichier zip à partir de cette nouvelle version du dossier, décompressez-le et exécutez le programme d'installation. Cela permettra d'installer de nouvelles versions de .Net ou toute autre exigence de mai, nous avons ajouté, puis de lancer le MSI pour installer notre application et l'utilisateur a à faire est de cliquez sur suivant quelques fois.
Si vous êtes en utilisant .Net pourquoi ne pas simplement utiliser ClickOnce? Il va tout faire vous parlez de la sortie de la boîte et ne requiert pratiquement zéro de l'installation.
Ce zip contient le code source pour une recherche de mot outil générateur qui comprend AppUpdater code réutilisable.
http://cid-842434ebe9688900.skydrive.live.com/self.aspx/Games/WordSearchGenerator-src-v1.3.zip
De 3 modules de code source qui ont "AppUpdater" dans le nom.
Il est très simpliste et ne fonctionne que pour une seule assemblée des applications. Aucun fichier MSI. Juste un EXE. Le philospohy est que les vérifications de mise à jour se faire automatiquement, mais les mises à jour sont installées qu'après confirmation de l'utilisateur.
La façon dont le programme de mise à jour fonctionne:
Il charge un document XML à partir d'une URL qui contient la "dernière version" de l'information, ainsi que d'une deuxième adresse URL à laquelle la nouvelle version est situé. Le programme de mise à jour de la logique vérifie la signature sur le document XML, mais vous ne pouvez pas les soins à ce sujet. Le programme de mise à jour puis de comparer la version actuelle contre la version la plus récente, et peut dire à l'application si une mise à jour est disponible. La mise à jour s'occupe également de la remplacer en place du problème.
Dans ce modèle, il y a trois "étapes du cycle de vie" d'une application lors d'une mise à jour. Dans le cours normal, l'application vérifie les mises à jour, puis exécute normalement. À un certain moment, l'utilisateur peut confirmer qu'ils veulent installer la mise à jour disponible, et le programme de mise à jour télécharge l'application d'un emplacement temporaire, commence alors un processus à l'aide de nouveaux exe téléchargé. Le programme de mise à jour de la logique puis sort le premier de ces processus. Le deuxième processus, basé sur la ligne de commande arguments donnés par le premier processus, se rend compte que c'est une nouvelle copie téléchargée et doit se reproduire. Il s'autocopie dans l'emplacement d'origine (spécifié sur la ligne de commande), commence que exe, et les sorties. Le troisième processus commence comme d'habitude, voit qu'il y a eu une mise à jour, et supprime le temp exe copie. Il fonctionne alors comme d'habitude, y compris la vérification de mises à jour. Il va trouver qu'il n'y a pas de mises à jour, et alors juste l'exécuter en tant que normale. Que couvre le fonctionnement de la mise en place de la logique.
Tout est géré par ces lignes dans le constructeur du Formulaire Windows ou Fenêtre WPF:
Le check-pour-problème de mise à jour est également géré par quelques lignes de code dans le constructeur, que de créer et d'exécuter un thread d'arrière-plan:
La CheckLatest est-ce:
L'événement terminé est-ce:
Il travaille à partir de WinForms ou WPF apps. Je suppose que ce serait un travail à partir de la console d'applications, mais je ne l'ai jamais essayé.
De la création de l' (possibbly signé) fichier manifeste est une tâche séparée, ne sont pas couverts ici.
Y penser, ce serait peut-être préférable emballé comme une classe de base AutoUpdatingForm (pour WinForms) ou AutoUpdatingWindow (WPF). Mais je n'ai jamais pris cette étape.
Il y a dix ans, j'ai écrit une mise à jour automatique (pas dans .NET), mais l'essentiel, c'est que l'application avait un numéro de version qui a été vérifié au démarrage. Dans ce cas, l'application interrogé une table de base de données qui avait la version actuelle et si la version est inférieure à la version actuelle, l'utilisateur est invité à télécharger la version la plus récente. La même chose pourrait être accompli par la vérification de l'URL.
Un à la solution je n'ai pas encore essayer c'est d'avoir un programme d'installation qui peut s'exécuter en mode silencieux.
La demande d'appeler le serveur et si elle a besoin de mettre à jour, il télécharge le dernier programme d'installation, puis l'exécute avec un silencieux ou une mise à jour du drapeau.
Il a beaucoup d'avantages :