Heim Backend-Entwicklung C#.Net-Tutorial Beispielanalyse zur automatischen Aktualisierung lokaler Programme in C#

Beispielanalyse zur automatischen Aktualisierung lokaler Programme in C#

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

Über automatische Updates des Systems. In letzter Zeit kam es vor, dass der lokale Client mit der neuesten Version der Systemdateien im Java-Backend überschrieben werden musste, was als automatisches Update bezeichnet wird.

Das lokale System erhält die Versionsnummer des aktuellen Systems, um die Java-Schnittstellendaten im Hintergrund anzufordern. Was mir zurückgegeben wird, ist der aus dem Hintergrundkomprimierungspaket konvertierte Base64-Byte-Stream.

Der Client muss das lokale Programm aktualisieren, um die neue Version zu erhalten.


    if (UpdateSystem(Path.Combine(Application.StartupPath, "Version.txt"), Path.Combine(Application.StartupPath, "u.zip")))
            {
                Application.Exit();
            }
Nach dem Login kopieren


/// <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;
        }
Nach dem Login kopieren


byte[] bytesFile = Convert.FromBase64String(obj["byteArray"].ToString());
Nach dem Login kopieren

Hier ist es ist Holen Sie sich den Byte-Stream.

Diese Methode kann das Problem lösen, dass mehrere Projekte in derselben Lösung die App.config unter demselben Projekt lesen können.

Hinweis: Es gibt referenzierte Klassenbibliotheken, die zum Betrieb komprimierter Pakete verwendet werden.

Lassen Sie uns über die Idee sprechen: Der erste Schritt besteht darin, den Bytestrom des komprimierten Pakets abzurufen und ihn lokal zu speichern. Der zweite Schritt besteht darin, die Dateien des komprimierten Pakets zu durchlaufen und die lokalen Dateien zu ersetzen, um den Vorgang abzuschließen das Versionsupdate des lokalen Systems.

Egal ob einfach oder komplex, wir müssen Schritt für Schritt vorankommen.

Das obige ist der detaillierte Inhalt vonBeispielanalyse zur automatischen Aktualisierung lokaler Programme in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So fügen Sie lokale Musik zu Limonadenmusik hinzu So fügen Sie lokale Musik zu Limonadenmusik hinzu Feb 23, 2024 pm 07:13 PM

Wie füge ich lokale Musik zu Soda Music hinzu? Sie können Ihre lokale Lieblingsmusik zur Soda Music APP hinzufügen, aber die meisten Freunde wissen nicht, wie man lokale Musik zu Soda Music hinzufügt Der Herausgeber, interessierte Nutzer kommen vorbei! Anleitung zur Verwendung von Soda-Musik. So fügen Sie lokale Musik zu Soda-Musik hinzu und klicken Sie auf den Funktionsbereich [Musik] unten auf der Hauptseite das Symbol [drei Punkte] in der unteren rechten Ecke; 3. Erweitern Sie abschließend die Funktionsleiste unten und wählen Sie die Schaltfläche [Herunterladen], um es zur lokalen Musik hinzuzufügen.

Wie sind die Berufsaussichten von C#? Wie sind die Berufsaussichten von C#? Oct 19, 2023 am 11:02 AM

Ganz gleich, ob Sie Anfänger oder erfahrener Profi sind: Die Beherrschung von C# ebnet den Weg für Ihre Karriere.

Wie füge ich Wasserzeichen hinzu und speichere entfernte Bilder, nachdem ich sie lokal in PHP gespeichert habe? Wie füge ich Wasserzeichen hinzu und speichere entfernte Bilder, nachdem ich sie lokal in PHP gespeichert habe? Jul 11, 2023 pm 11:48 PM

Wie füge ich Wasserzeichen hinzu und speichere entfernte Bilder, nachdem ich sie lokal in PHP gespeichert habe? Bei der PHP-Entwicklung müssen wir häufig entfernte Bilder lokal speichern. Manchmal müssen wir dem gespeicherten Bild möglicherweise auch ein Wasserzeichen hinzufügen, um das Urheberrecht zu schützen oder zusätzliche Informationen hinzuzufügen. In diesem Artikel erfahren Sie, wie Sie mit PHP Remote-Bilder lokal speichern und den gespeicherten Bildern Wasserzeichen hinzufügen. 1. Remote-Bilder lokal speichern Zuerst müssen wir die Dateioperationsfunktion von PHP verwenden, um Remote-Bilder lokal zu speichern. Hier ist ein einfacher Beispielcode: &

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks May 06, 2024 pm 04:43 PM

Die Entwicklung von Technologien der künstlichen Intelligenz (KI) ist heute in vollem Gange und sie haben in verschiedenen Bereichen großes Potenzial und Einfluss gezeigt. Heute wird Dayao Ihnen 4 .NET Open-Source-KI-Modell-LLM-bezogene Projekt-Frameworks vorstellen und hofft, Ihnen einige Referenzen zu geben. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel ist ein Open-Source-Softwareentwicklungskit (SDK), das für die Integration großer Sprachmodelle (LLM) wie OpenAI und Azure entwickelt wurde

Win11 APK-Installationsanleitung Win11 APK-Installationsanleitung Jan 03, 2024 pm 10:24 PM

Wie wir alle wissen, hat Microsoft angekündigt, dass Win11 Android-Anwendungen ausführen und lokale APK installieren kann. Nach dem Update von Win11 stellten Benutzer jedoch fest, dass sie nicht wussten, wie sie die lokale APK installieren sollten Diese Funktion wurde jedoch für Win11 implementiert. Warten Sie, bis die Funktion installiert ist, bevor Sie sie verwenden können. So installieren Sie eine lokale APK in Win11: 1. Laut Microsoft können Sie nach der Implementierung dieser Funktion durch Win11 direkt auf die heruntergeladene APK-Datei doppelklicken, um sie direkt zu installieren. 2. Nach Abschluss der Installation können Benutzer sie auch direkt im System ausführen. 3. Obwohl es sich mittlerweile um die offizielle Version von Win11 handelt, hat Microsoft diese Funktion für Win11 noch nicht implementiert. 4. Wenn der Benutzer also Win11 verwenden möchte

.NET-Leistungsoptimierungstechnologie für Entwickler .NET-Leistungsoptimierungstechnologie für Entwickler Sep 12, 2023 am 10:43 AM

Wenn Sie ein .NET-Entwickler sind, müssen Sie sich der Bedeutung der Optimierung von Funktionalität und Leistung bei der Bereitstellung hochwertiger Software bewusst sein. Durch den fachgerechten Einsatz der bereitgestellten Ressourcen und die Verkürzung der Ladezeiten der Website schaffen Sie nicht nur ein angenehmes Erlebnis für Ihre Nutzer, sondern senken auch die Infrastrukturkosten.

Leistungsunterschiede zwischen Java-Framework und .NET-Framework Leistungsunterschiede zwischen Java-Framework und .NET-Framework Jun 03, 2024 am 09:19 AM

In Bezug auf die Verarbeitung von Anforderungen mit hoher Parallelität bietet .NETASP.NETCoreWebAPI eine bessere Leistung als JavaSpringMVC. Zu den Gründen gehören: AOT-Frühkompilierung, die die Startzeit verkürzt, wobei Entwickler für die Zuweisung und Freigabe von Objektspeicher verantwortlich sind.

Wie füge ich eine lokale Loopback-Adresse unter CentOS7 hinzu? Wie füge ich eine lokale Loopback-Adresse unter CentOS7 hinzu? Jan 13, 2024 pm 08:00 PM

1. Fügen Sie ipaddradd10.10.1.1/32devlo:1 vorübergehend hinzu und schlagen Sie nach dem Neustart fehl. 2. Fügen Sie cd/etc/sysconfig/network-scriptscpifcfg-loifcfg-lo:1[root@localhostnetwork-scripts]#catifcfg-lo:1DEVICE dauerhaft hinzu =lo: 1IPADDR=10.10.1.1NETMASK=255.255.255.255ONBOOT=yesNAME=loopback1[root@localhostnetwork-scripts]#ipa

See all articles