Quel est le meilleur moyen pour une application .NET winforms de se mettre à jour sans utiliser ClickOnce?

StackOverflow https://stackoverflow.com/questions/150994

Question

Pour des raisons techniques, je ne peux pas utiliser ClickOnce pour mettre à jour automatiquement mon application .NET et ses assemblages. Quel est le meilleur moyen de gérer la mise à jour automatique dans .NET?

Était-ce utile?

La solution

Je pense que le blocage de l'application de mise à jour était un précurseur. à ClickOnce. Cela pourrait valoir la peine d’enquêter. Regarder son code source pourrait suffire à susciter quelques idées.

Autres conseils

Nous avons un produit commercial / open source: wyBuild & amp; wyUpdate . Il possède une capacité de correction et est simple à utiliser.

Edit: Je me fais rejeter dans les chiffres négatifs, mais mon post n'était pas juste une vente flagrante. Notre programme de mise à jour, wyUpdate, est à code source ouvert, écrit en C # et est sous licence BSD.

Je pensais que cela pourrait aider quiconque essayant de créer un programme de mise à jour à partir de zéro en utilisant le framework .NET.

Mais votez pour moi si vous devez.

Il y a environ 3 ou 4 ans, j'ai publié un exemple situé en dehors de l'application. Si une mise à jour est détectée, l'application appelle le programme de mise à jour et s'arrête, puis les mises à jour sont effectuées et l'application redémarre.

J'ai publié l'exemple sur l'ancien site GotDotNet ... Je vais devoir essayer de le trouver.

Cela a fonctionné parfaitement et a pris environ 1 à 2 heures pour écrire.

Indigo Rose propose un produit appelé TrueUpdate qui le fait également à votre place. Je les ai utilisées dans le passé à partir d'applications gérées et non gérées. Il s’agit d’un fichier que vous avez mis sur votre serveur (http, ftp, celui que vous préférez). Ensuite, vous appelez un EXE côté client pour vérifier les mises à jour. Le fichier de mises à jour est extrait et contient une logique permettant de détecter la version du client (votre choix, la détection de DLL, la lecture de la clé de registre, etc.). Ensuite, il trouvera le programme de mise à jour approprié et téléchargera le fichier à exécuter. Cela fonctionne également bien avec les mandataires.

La seule chose qu’ils ne font pas, c’est réellement de construire les correctifs pour vous. Vous devez le faire manuellement ou avec un autre produit qu'ils ont. C’est une solution commcerial qui fonctionne assez bien si vous en avez besoin.

Pour commencer, il vaut probablement la peine de regarder Alex L'article de Feinman sur MSDN intitulé "Création d'applications à mise à jour automatique avec le .NET Compact Framework".

Ecrivez le vôtre.

J'ai entendu dire qu'ils sont un peu difficiles à écrire la première fois, mais après, cela devient simple.

Étant donné que je n'en ai pas encore écrit (bien que ce soit sur ma liste), je peux vous donner certaines des choses auxquelles j'ai pensé. Conservez des versions de dll précises, car cela est important pour la mise à jour automatique. Et assurez-vous que le programme de mise à jour peut se mettre à jour.

Dans votre fichier Program.cs, procédez comme suit:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Update();
        Application.Run(new Form1());
    }

    private static void Update()
    {
        string mainFolder;
        string updateFolder;
        string backupFolder;

        foreach (string file in
            System.IO.Directory.GetFiles(updateFolder))
        {
            string newFile = file.Replace(
                updateFolder, mainFolder);

            if (System.IO.File.Exists(newFile))
            {
                System.IO.File.Replace(file, newFile, backupFolder);
            }
            else
            {
                System.IO.File.Move(file, newFile);
            }
        }
    }

De plus, il peut être rendu récursif de récupérer la structure de répertoires si nécessaire. Cela vous permettra de mettre à jour n'importe quel fichier .dll de votre projet. tout, en fait, en dehors du fichier .exe principal. Puis, ailleurs dans votre application, vous pouvez récupérer les fichiers de votre serveur (ou de tout autre endroit) qui doivent être mis à jour, placez-les ensuite dans le dossier updateFolder et redémarrez l'application.

Sur un projet il y a longtemps, à l'aide de .NET Compact Framework 1.0, j'ai écrit une application de mise à jour automatique. Nous avons utilisé la fonctionnalité de déploiement CAB de SqlCE pour obtenir les fichiers sur le périphérique (vous utiliseriez maintenant Sync Framework), et nous avions un exe distinct qui décompactait le fichier CAB et mettait à jour les fichiers.

Une mise à jour ressemblerait à ceci: l'utilisateur serait invité à se mettre à jour, cliquer sur un bouton et quitter l'application d'interface utilisateur. Le programme de mise à jour exe prend le relais, récupère le fichier cab du serveur, sauvegarde les dll actuelles et décompresse le fichier cab avec wceload. L'interface utilisateur serait alors redémarrée et si elle échouait, la mise à jour serait annulée. Cela reste un scénario intéressant sur les appareils compacts, mais il existe maintenant de meilleurs outils que simplement sqlce.

Je voudrais certainement examiner le bloc d’application du programme de mise à jour et le cadre de synchronisation pour le mettre en œuvre si clickonce n’est pas une option. Mais je suppose que vous aurez toujours besoin d’un exécutable séparé, car les DLL que vous souhaitez écraser sont probablement des fichiers verrouillées lorsqu’elles sont utilisées par un exe, comme l’a déjà dit une des réponses précédentes.

J'ai écrit mon propre serveur automatique, qui utilise un fichier de configuration commun à l'application, qui contient des URL permettant de télécharger les dernières versions à partir de / check si elle doit être mise à jour.

De cette façon, vous exécutez le programme de mise à jour, qui met à jour l'application ou non, puis l'application, qui, dans le cadre d'une opération normale, recherche un programme de mise à jour et des correctifs actualisés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top