41 votes

Solution gratuite pour les mises à jour automatiques avec une application .NET/C# ?

En cherchant, je vois que cette question a été posée maintes et maintes fois, mais pas de manière suffisamment adéquate, alors voilà. Je suis un développeur amateur sans budget. Un programme que j'ai développé a besoin de corrections régulières de bogues, et moi et les utilisateurs sommes fatigués de devoir mettre à jour manuellement.

Moi, parce que ma solution actuelle, qui consiste à mettre à jour un fichier texte via FTP et mes liens de téléchargement sur le site web, puis à espérer que les utilisateurs verront le message "il y a une mise à jour", et enfin à faire en sorte qu'ils prennent la peine de télécharger manuellement la mise à jour, eh bien franchement, c'est épouvantable.

Les utilisateurs, parce que, eh bien, "Allez-vous un jour implémenter la mise à jour automatique ?" "Y aura-t-il un jour une fonction de mise à jour automatique ?" Et s'il m'arrive de foirer le processus de mise à jour, les fourches commencent à arriver.

Dans le passé, je me suis penché sur :

  • WinSparkle - Pas de mises à jour dans l'application, et la DLL fait 500 KB. Ma solution actuelle ne fait que quelques Ko dans l'exécutable et n'a pas de mises à jour in-app.
  • Composant de mise à jour des applications .NET - Malheureusement, je n'arrive pas à comprendre la documentation.
  • AutoUpdate d'Eduardo Olivera - Cela ne semble pas prendre en charge autre chose que le travail avec des fichiers qui ne sont pas utilisés.
  • wyUpdate - wyBuild n'est pas gratuit, et bien que la spécification wyUpdate soit disponible, elle est tout simplement trop complexe et trop longue à parcourir.
  • Mise à jour de AppLife - Idem pour la dernière phrase.
  • ClickOnce - Les solutions de contournement pour mettre en œuvre le lancement au démarrage sont massives, horribles et ne valent pas la peine pour une fonctionnalité aussi simple. La publication est un calvaire ; le FTP manuel et le remplacement des fichiers de tous les fichiers est nécessaire pour les serveurs sans FrontPage Extensions.

Il est assez décevant de constater que la situation est telle sous Windows, alors que l'on dispose d'implémentations simples et agréables sous Mac OS X, telles que Étincelle .

0 votes

Il serait plus simple de créer votre propre dispositif de mise à jour automatique - utilisez une application de démarrage pour lancer votre application. Le boot-strapper vérifiera si une mise à jour est disponible et, si oui, la téléchargera et l'installera. Si l'installation nécessite des privilèges d'administrateur, vous devez disposer d'un service Windows pour exécuter l'installateur.

0 votes

Je suis tout à fait d'accord avec vous, ça craint. Avez-vous envisagé ClickOnce ? Je ne l'ai pas utilisé personnellement, mais j'ai entendu dire qu'il était très efficace dans ce domaine.

0 votes

Maxim Zaslavsky - Oui, je l'ai envisagé. J'ai énuméré les problèmes que j'ai rencontrés à ce sujet dans mon message original, donc vous avez pu le manquer. Si seulement c'était bon.

19voto

Camilo Martin Points 5586

Mettez-le en œuvre vous-même ! Ce sera amusant. Créez une application séparée qui ne contient que la logique de mise à jour, c'est-à-dire récupérer les fichiers en ligne, les télécharger, remplacer les fichiers locaux et montrer cela visuellement à l'utilisateur.

Ainsi, votre application principale pourrait vérifier l'existence de mises à jour, et si elles existent, elle inviterait l'utilisateur à les mettre à jour. Si l'utilisateur le souhaite, elle exécutera le programme de mise à jour, se fermera (pour que la mise à jour puisse avoir lieu) et presto.

Les seules choses dont vous avez besoin sont facilement disponibles en C#, l'accès FTP et IO.

Edit : Je sais que ce n'est pas quelque chose de très facile, mais c'est une occasion parfaite d'apprendre :

  • Comment télécharger (correctement) des fichiers, d'une manière abstraite qui peut être étendue à ftp, http, etc.
  • Comment effectuer (correctement) une tâche simple sur de nombreux fichiers - en les copiant ou en les écrasant (ce qui implique la gestion des erreurs).
  • Pratique (parce qu'il n'y a pas de manière "correcte") pour superposer et encapsuler un logiciel.
  • Comment faire face à la non-coopération du système d'exploitation et des autres logiciels (antivirus, pare-feu, etc.) ?

Ce sont toutes des choses que nous devons bien connaître - S'il faut quelques semaines pour coder une mise à jour, cela signifie que vous aviez besoin de quelques semaines d'apprentissage. Si vous n'avez pas besoin d'apprendre, il est temps d'affiner vos compétences ! Si vous ne savez pas si vous en avez besoin, c'est le moment de le découvrir ! :)

Note : Je sais Je le fais. besoin d'apprendre à mieux gérer les fichiers et les E/S de réseau

0 votes

+1... d'accord, et il n'est pas trop compliqué d'ajouter une certaine sécurité et de vérifier qu'il ne va copier que dans les bibliothèques signées par vous.

2 votes

Mais encore une fois, si c'est simple, amusant et quelque peu générique après la mise en œuvre d'un mécanisme maison, alors pourquoi ces tentatives sont-elles si largement vouées à l'échec (c'est-à-dire la liste de logiciels notée dans la question) ? Je pense qu'il y a probablement plus de détails quand on s'y met, surtout si l'on considère que vos mises à jour doivent être livrées à des plateformes disparates avec des pare-feu, des logiciels de sécurité et AV, etc. Je peux prévoir beaucoup de cas limites.

31 votes

J'ai construit une telle bibliothèque, cela semble simple, mais j'ai découvert très rapidement que ce n'est pas le cas, en particulier si vous voulez construire des fonctionnalités plus robustes comme avoir différentes sources (disque, web, réseau), différents mécanismes de patch (complet, delta, etc.), des téléchargements pouvant être repris, travailler avec les différents modèles de sécurité de xp, vista, win 7, etc. Je n'essaie pas de vous dissuader de développer votre propre système, mais ne le considérez pas non plus comme une tâche triviale.

7voto

unrelativity Points 1677

J'aurais dû le mettre à jour il y a longtemps, oups !

Mais de toute façon, j'ai utilisé SparkleDotNET depuis un certain temps maintenant et il fonctionne à merveille. Il y a quelques petits bugs ici et là mais j'ai déjà aidé à en résoudre certains, et j'espère pouvoir me débarrasser des autres aussi :)

Pour ceux qui ont le temps d'utiliser la fonctionnalité de publication de Visual Studio, et dont l'application est relativement autonome, et ne nécessite rien comme le lancement au démarrage, je recommanderais certainement ClickOnce. MetroTwit l'utilise et dispose d'une belle interface de mise à jour dans l'application, ce qui lui confère une certaine souplesse (du moins jusqu'à un certain point). Pour le lancement au démarrage, c'est possible pour le faire, mais les méthodes pour le faire sont assez bricolées et ne fonctionnent pas très bien.

3 votes

Sauf erreur de ma part, SparkleDotNet semble abandonné ; la dernière mise à jour date de 2011 :(

4voto

Ravi Patel Points 641

Vous pouvez essayer Autoupdater.NET à partir de GitHub Je l'ai développé moi-même et il fonctionne très bien dans mes applications. Il vous suffit d'ajouter une ligne dans votre code et le tour est joué. De plus, il est open source, vous pouvez donc le modifier et l'utiliser comme vous le souhaitez.

0 votes

Essayez-le, c'est simple et ça marche comme un charme ! grand projet !

1voto

abatishchev Points 42425

Vous pouvez même ne pas développer une application externe mais l'implémenter en tant que module de votre application, par exemple dans le module namespace Update Utilisez le constructeur d'assemblages dynamiques pour générer un exe, démarrez-le et quittez l'application principale, redémarrez-le lorsque la mise à jour sera terminée.

Un peu plus info .

1voto

Yaur Points 4362

Il existe également Mise à jour du jour qui est open source et est utilisé par un de mes clients. Nous/ils sommes principalement intéressés par ce système dans le contexte d'un service Windows et il fonctionne assez bien pour cela.

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