7
votes

Mise à jour automatique

J'ai un système avec deux applications Web, un service Web, un service Windows et une application WPF fonctionnant 24 heures sur 24 sur un écran tactile. Tous sont connectés à une base de données.

Je souhaite pouvoir mettre à niveau toutes ces applications en téléchargeant des fichiers de mise à niveau dans la base de données et définir la date et l'heure de la mise à niveau.

J'ai une idée sur la façon de faire cela.

  1. Une application a un thread en cours d'exécution pour rechercher des mises à niveau disponibles.
  2. Lorsqu'une mise à niveau est trouvée, le fichier est téléchargé sur l'ordinateur de l'application.
  3. Lorsque le téléchargement est terminé, les applications déclenchent un redémarrage.
  4. Lorsque l'application démarre, il recherche un fichier de mise à niveau sur l'ordinateur local.
  5. Si la mise à niveau est disponible, l'application mises à niveau elle-même.

    Je ne suis pas vraiment sûr de savoir comment toutes ces étapes devraient être faites encore, surtout le dernier. Mais je veux des commentaires à ce sujet. Est-ce complètement faux? Suis-je sur la bonne voie? Toute astuce sur la façon de le faire comme ça ou d'une autre manière?


7 commentaires

Oui, votre approche est utilisable. Selon la taille du fichier de mise à niveau, je ne le stockerais probablement pas dans la base de données, mais c'est juste un nitpick.


Piskvor a raison, vous ne voulez pas la stocker dans la base de données. J'ai posté une réponse ci-dessous qui vous indique sur ClickOnce.


Je voudrais également envisager un moyen de rentabiliser, dans le cas de la mise à jour échoue! Surtout si vous n'avez aucun accès physique à l'appareil.


En réponse au point de ChrisZero. ClickOnce a construit son soutien à rouler, j'ai édité ma réponse.


Nous avons besoin que toutes les applications aient une connexion à la base de données. Mais nous ne pouvons pas supposer que toutes les applications ont une connexion à Internet. C'est un système médical pour les hôpitaux et les écrans tactiles, par exemple, sont situés dans des quartiers locaux. Ils sont connectés à une base de données centrale du réseau de l'hôpital, mais ne peuvent dans certains cas que dans certains cas, à l'extérieur du réseau.


Pourquoi je veux faire cela dans la base de données est également parce que je veux faire des mises à niveau par client - simplement parce qu'une mise à niveau est disponible, nous ne voulons pas que tous nos clients l'aient.


Cela n'implique pas que vous devez stocker les fichiers binaires dans la DB. Mais il semble raisonnable de stocker une cartographie du client à la version dans la DB. En outre, comme pour le point n ° 1, une minuterie semble plus raisonnable qu'un fil dédié.


6 Réponses :


2
votes

Je pense que vous allez dans les bonnes lignes ici. Une application d'interrogation pour vérifier la base de données pour l'existence d'une nouvelle mise à jour suivie d'un script de déploiement XCopy le ferait.

Cela pourrait également être faisable d'un script PowerShell qui fonctionne sur un calendrier, disons toutes les 10 minutes. Il pourrait vérifier la base de données, fermer le processus et le service, XCopy l'application (à partir d'une source partagée) et redémarrer ledit service et application.

Tout cela suppose que vous n'utilisez pas Windows Installer pour emballer et déployer votre application initialement. Bien qu'un XCopy pour remplacer directement les binaires ne blesse pas un paquet MSI, il n'est pas recommandé. Nous utilisons le déploiement de l'annonce MSI au travail et c'est une douleur au meilleur des temps!

MSDN contient des références pour le déploiement MSI VS XCopy pour les applications WPF (ainsi que les exigences de sécurité).

C'était le premier lien que j'ai trouvé pour Querlering SQL de PowerShell: HTTP : //elegantcode.com/2008/03/27/discouveringing-windows-powershell/

bonne chance!


0 commentaires

0
votes

Microsoft a un Mise à jour du bloc d'application qui pourrait être ce que vous cherchent.


0 commentaires

0
votes

Voulez-vous vraiment exécuter une mise à jour de la base de données ou est-ce juste une solution possible? Vous réinventez la roue.

Regardez le déploiement ClickOnce, tout ce dont vous avez besoin est déjà fait pour vous et intégré à VisualStudio. Si vous utilisez quelque chose qui existe déjà, vous bénéficiez de la documentation existante, des blogs utiles de personnes qui ont déjà traversé les points de douleur et les mises à jour et les corrections.

ClickOnce Déploiement

ClickOnce Déploiement dans .NET Framework 2.0

Comment vous voulez utiliser ClickOnce dépend de ce que vous voulez en sortir. En dehors de la boîte, vous pouvez facilement créer un déploiement qui vérifie une mise à niveau chaque fois que vous exécutez l'application, mais vous pouvez également utiliser un peu de code que l'application vérifie les mises à jour tandis que c'est en cours d'exécution.

Le blocVersion d'applications de mise à jour que Dominic Zukiewicz mentionné est le pré-curseur à clickonce.

Edit

ClickOnce fournit un scénario de roulement sur le serveur et la fin du client. Le client peut revenir à une version précédente à l'aide de la dialogue Normal Add Supprimer les programmes et vous pouvez facilement republier une version précédente.


3 commentaires

Ça a l'air bien. Mais certaines choses que je pense ne fonctionne pas dans mon scénario. Les problèmes fonctionnent pour tous nos types d'applications (Web, WPF, Service)? Nécessite un accès Internet pour toutes les applications? Vous ne pouvez pas choisir l'installation du système pour obtenir la mise à niveau? Je pourrais me tromper sur quelque chose ici.


Désolé, j'ai manqué le "Je veux pouvoir mettre à niveau toutes ces applications". Une réponse courte est non, vous utiliseriez ClickOnce pour une application cliente. Si vous souhaitez mettre à niveau toutes les applications de la même manière, vous voudrez peut-être repenser votre stratégie de déploiement, il existe rarement une taille unique. Ce que je peux dire, c'est de l'expérience lors du déploiement de l'utilisateur final, ClickOnce est un très bon outil de déploiement où tous les kinks ont été élaborés et fournissent une très bonne expérience utilisateur.


J'y regarderai d'autres. Tout est meilleur que ce que nous faisons aujourd'hui - VPN et Demote Desktop à tous les serveurs dont nous avons besoin et une voiture pour les clients où nous n'avons pas d'accès VPN.



1
votes

Vous aurez du mal à le faire avec ClickOnce. ClickOnce fonctionnerait uniquement pour votre application WPF, elle ne peut rien faire avec les services ou l'application Web. Vous pouvez écrire une application "Updater" déployée séparée de ClickOnce dont le travail consiste à mettre à jour les autres applications, mais cela semble toujours un peu IFFY.

Cela peut sembler stupide, mais je commencerais avec la chose la plus simple que je puisse penser. Que diriez-vous d'utiliser Dropbox pour appuyer sur vos fichiers de mise à jour; Ensuite, un Script AutohotKey qui fonctionne au démarrage, regarde le dossier Dropbox pour de nouvelles mises à jour et les exécute?

sonne Hokey, mais c'est quelque chose que vous pourriez prouver dans une heure ou deux.


0 commentaires

0
votes

Vous pouvez créer un autre service Windows qui effectue les mises à jour quotidiennement. Le service examinerait un dossier spécifique s'il y a des mises à jour à traiter. Par exemple, il pourrait rechercher un fichier XML qui lui indique la nouvelle version de l'application et les fichiers à mettre à jour. Il ferait fermer les applications / services, sauvegarder les fichiers qu'il doit mettre à jour, démarrer l'application / services et nettoyer les fichiers de sauvegarde en conservant au moins trois fichiers de sauvegarde. Le service devrait garder une trace de la dernière et la version actuelle installée de sorte que lorsqu'il lit le fichier XML, il peut vérifier s'il s'agit d'une nouvelle mise à jour ou non ou vous pouvez simplement supprimer le fichier XML lorsqu'il est terminé.


0 commentaires

0
votes

Comment sur Google Omaha ? C'est un outil open source, actuellement utilisé pour appuyer sur les mises à jour de Google Chrome et Google Earth. Omaha peut également gérer l'installation d'applications. Une vue d'ensemble de conception de haut niveau peut être trouvée ici .


0 commentaires