Maison développement back-end Tutoriel C#.Net Exemple d'analyse de la façon de mettre à jour automatiquement les programmes locaux en C#

Exemple d'analyse de la façon de mettre à jour automatiquement les programmes locaux en C#

Aug 08, 2017 pm 02:13 PM
.net 本地

À propos des mises à jour automatiques du système. Récemment, il est apparu qu'il était nécessaire d'écraser le client local avec la dernière version des fichiers système dans le backend Java, ce que l'on appelle une mise à jour automatique.

Le système local obtiendra le numéro de version du système actuel pour demander les données de l'interface Java en arrière-plan. Ce qui m'est renvoyé est le flux d'octets base64 converti à partir du package de compression en arrière-plan.

Le client doit mettre à jour le programme local pour obtenir la nouvelle version.


    if (UpdateSystem(Path.Combine(Application.StartupPath, "Version.txt"), Path.Combine(Application.StartupPath, "u.zip")))
            {
                Application.Exit();
            }
Copier après la connexion


/// <summary>
        /// 读取本地版本请求更新
        /// </summary>
        /// <param name="document">读取的文件信息</param>
        /// <param name="zipPath">返回zip包本地路径</param>
        /// <returns></returns>
        private bool UpdateSystem(string document, string zipPath)
        {
            try
            {
                Dictionary<string, string> postDic = new Dictionary<string, string>();
                //获取文件内的版本号
                if(File.Exists(document))
                {
                    postDic.Add("version", File.ReadAllText(document).Trim());
                }
                else
                {
                    postDic.Add("version", "0");
                }

                string postJson = JsonConvert.SerializeObject(postDic);
                string url = GetAppSettingValue("serverUrl") + "parkClient/parkClientUpdate";
                //返回的json数据
                JObject obj = (JObject)JsonConvert.DeserializeObject(PostData(postJson, url));
                string newVersion = obj["version"].ToString();
                if (!String.IsNullOrWhiteSpace(newVersion))
                {
                    byte[] bytesFile = Convert.FromBase64String(obj["byteArray"].ToString());
                    if (obj["clientMD5"].ToString() == BitConverter.ToString(
                        new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(bytesFile)).Replace("-", ""))
                    {
                        ZipCoverage(bytesFile, zipPath);

                        File.WriteAllText(document, newVersion);
                       
                    }
                }

                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 解压zip包覆盖更新
        /// </summary>
        /// <param name="bytes">接受更新包的字节信息</param>
        /// <param name="zpath">覆盖的路径</param>
        private void ZipCoverage(byte[] bytes, string zpath)
        {
            File.WriteAllBytes(zpath, bytes);
            using (ZipArchive archive = ZipFile.OpenRead(zpath))
            {
                string file = null;
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    if (!entry.FullName.EndsWith("/"))
                    {
                        file = Path.Combine(Application.StartupPath, entry.FullName);
                        if (File.Exists(file))
                        {
                            File.Delete(file);
                        }
                    }
                }
            }
            ZipFile.ExtractToDirectory(zpath, Application.StartupPath);
           
        }

        /// <summary>
        /// 获取配置文件中的appSettings节中的配置内容
        /// </summary>
        /// <param name="appSettingKey"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        private string GetAppSettingValue(string appSettingKey)
        {
            ExeConfigurationFileMap map = new ExeConfigurationFileMap { ExeConfigFilename = @"TDH.Parking.Client.exe.config" };
            return ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).AppSettings.Settings[appSettingKey].Value;
        }
Copier après la connexion


byte[] bytesFile = Convert.FromBase64String(obj["byteArray"].ToString());
Copier après la connexion

Voici est Obtenir le flux d'octets.

Cette méthode peut résoudre le problème selon lequel plusieurs projets dans la même solution peuvent lire le App.config sous le même document de projet.

Remarque : Il existe des bibliothèques de classes référencées, qui sont utilisées pour faire fonctionner des packages compressés.

Parlons de l'idée : la première étape consiste à obtenir le flux d'octets du package compressé et à l'enregistrer localement. La deuxième étape consiste à parcourir les fichiers du package compressé et à remplacer les fichiers locaux pour terminer. la mise à jour de la version du système local.

Que ce soit simple ou complexe, nous devons avancer étape par étape.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajouter de la musique locale à la musique soda Comment ajouter de la musique locale à la musique soda Feb 23, 2024 pm 07:13 PM

Comment ajouter de la musique locale à Soda Music ? Vous pouvez ajouter votre musique locale préférée à l'application Soda Music, mais la plupart des amis ne savent pas comment ajouter de la musique locale. Voici ensuite le didacticiel graphique sur la façon d'ajouter de la musique locale à Soda Music. l'éditeur. , les utilisateurs intéressés viennent jeter un œil ! Tutoriel sur l'utilisation de la musique soda. Comment ajouter de la musique locale à la musique soda. 1. Ouvrez d'abord l'application soda music et cliquez sur la zone de fonction [Musique] en bas de la page principale. l'icône [trois points] dans le coin inférieur droit ; 3. Enfin, développez la barre de fonctions ci-dessous et sélectionnez le bouton [Télécharger] pour l'ajouter à la musique locale.

Quelles sont les perspectives d'emploi du C# ? Quelles sont les perspectives d'emploi du C# ? Oct 19, 2023 am 11:02 AM

Que vous soyez débutant ou professionnel expérimenté, la maîtrise du C# ouvrira la voie à votre carrière.

Comment ajouter un filigrane et enregistrer des images distantes après les avoir enregistrées localement en PHP ? Comment ajouter un filigrane et enregistrer des images distantes après les avoir enregistrées localement en PHP ? Jul 11, 2023 pm 11:48 PM

Comment ajouter un filigrane et enregistrer des images distantes après les avoir enregistrées localement en PHP ? Dans le développement PHP, nous rencontrons souvent le besoin de sauvegarder localement des images distantes. Parfois, nous pouvons également avoir besoin d'ajouter un filigrane à l'image enregistrée pour protéger les droits d'auteur ou ajouter des informations supplémentaires. Cet article explique comment utiliser PHP pour enregistrer des images distantes en local et ajouter des filigranes aux images enregistrées. 1. Enregistrez les images distantes en local. Tout d'abord, nous devons utiliser la fonction d'opération de fichier de PHP pour enregistrer les images distantes en local. Voici un exemple de code simple : &

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM May 06, 2024 pm 04:43 PM

Le développement des technologies d’intelligence artificielle (IA) bat son plein aujourd’hui et elles ont montré un grand potentiel et une grande influence dans divers domaines. Aujourd'hui, Dayao partagera avec vous 4 cadres de projets liés au modèle d'IA open source .NET LLM, dans l'espoir de vous fournir une référence. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel est un kit de développement logiciel (SDK) open source conçu pour intégrer de grands modèles de langage (LLM) tels qu'OpenAI, Azure

Guide d'installation de l'apk Win11 Guide d'installation de l'apk Win11 Jan 03, 2024 pm 10:24 PM

Comme nous le savons tous, Microsoft a annoncé que Win11 sera capable d'exécuter des applications Android et d'installer l'apk local. Cependant, après la mise à jour de Win11, les utilisateurs ont constaté qu'ils ne savaient pas comment installer l'apk local. encore implémenté cette fonctionnalité pour win11. Il faut attendre que la fonction soit installée avant de pouvoir l'utiliser. Comment installer l'apk local dans win11 : 1. Selon Microsoft, une fois que win11 a installé cette fonction, vous pouvez directement double-cliquer sur le fichier apk téléchargé pour l'installer directement. 2. Une fois l'installation terminée, les utilisateurs peuvent également l'exécuter directement dans le système. 3. Bien qu'il s'agisse désormais de la version officielle de Win11, Microsoft n'a pas encore implémenté cette fonctionnalité pour Win11. 4. Donc, si l'utilisateur souhaite utiliser Win11

Technologie d'optimisation des performances .NET pour les développeurs Technologie d'optimisation des performances .NET pour les développeurs Sep 12, 2023 am 10:43 AM

Si vous êtes un développeur .NET, vous devez être conscient de l'importance d'optimiser les fonctionnalités et les performances pour fournir des logiciels de haute qualité. En utilisant de manière experte les ressources fournies et en réduisant les temps de chargement des sites Web, vous créez non seulement une expérience agréable pour vos utilisateurs, mais vous réduisez également les coûts d'infrastructure.

Différences de performances entre le framework Java et le framework .NET Différences de performances entre le framework Java et le framework .NET Jun 03, 2024 am 09:19 AM

En termes de traitement des requêtes à haute concurrence, .NETASP.NETCoreWebAPI fonctionne mieux que JavaSpringMVC. Les raisons incluent : la compilation précoce AOT, qui réduit le temps de démarrage, une gestion plus raffinée de la mémoire, où les développeurs sont responsables de l'allocation et de la libération de la mémoire des objets.

Comment ajouter une adresse de bouclage locale sur CentOS7 ? Comment ajouter une adresse de bouclage locale sur CentOS7 ? Jan 13, 2024 pm 08:00 PM

1. Ajoutez temporairement ipaddradd10.10.1.1/32devlo:1 et échouez après le redémarrage 2. Ajoutez définitivement cd/etc/sysconfig/network-scriptscpifcfg-loifcfg-lo:1[root@localhostnetwork-scripts]#catifcfg-lo:1DEVICE. =lo : 1IPADDR=10.10.1.1NETMASK=255.255.255.255ONBOOT=yesNAME=loopback1[root@localhostnetwork-scripts]#ipa

See all articles