ホームページ バックエンド開発 C#.Net チュートリアル C# でローカル プログラムを自動的に更新する方法の分析例

C# でローカル プログラムを自動的に更新する方法の分析例

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

システムの自動アップデートについて。最近、Java バックエンドのシステム ファイルの最新バージョンでローカル クライアントを上書きする必要がある状況が発生しています。これは自動更新と呼ばれます。

ローカル システムは、現在のシステムのバージョン番号を取得して、バックグラウンド Java インターフェイス データを要求します。返されるのは、バックグラウンド圧縮パッケージから変換された Base64 バイト ストリームです。

クライアントは新しいバージョンを取得するときにローカルプログラムを更新する必要があります。


    if (UpdateSystem(Path.Combine(Application.StartupPath, "Version.txt"), Path.Combine(Application.StartupPath, "u.zip")))
            {
                Application.Exit();
            }
ログイン後にコピー


/// <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;
        }
ログイン後にコピー


byte[] bytesFile = Convert.FromBase64String(obj["byteArray"].ToString());
ログイン後にコピー

取得したバイトストリームは次のとおりです。

この方法は、同じソリューション内の複数のプロジェクトが同じプロジェクトの下の App.config ファイルを読み取ることができるという問題を解決できます。

注: 圧縮パッケージの操作に使用される参照クラス ライブラリ があります。

アイデアについて話しましょう。最初のステップは、実際に圧縮パッケージのバイト ストリームを取得し、それをローカルに保存することです。2 番目のステップは、圧縮パッケージ ファイルをループしてローカル ファイルを置き換え、バージョンの更新を完了することです。ローカルシステム。

単純であろうと複雑であろうと、私たちは一歩一歩前進する必要があります。

以上がC# でローカル プログラムを自動的に更新する方法の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ローカル音楽をソーダミュージックに追加する方法 ローカル音楽をソーダミュージックに追加する方法 Feb 23, 2024 pm 07:13 PM

ローカル音楽を Soda Music に追加する方法? Soda Music APP にお気に入りのローカル音楽を追加できますが、ほとんどの友達はローカル音楽の追加方法を知りません。次は、Soda Music にローカル音楽を追加する方法に関するグラフィック チュートリアルです。編集者、興味のある方はぜひ見に来てください!ソーダ ミュージックの使用に関するチュートリアル. ソーダ ミュージックにローカル音楽を追加する方法. 1. まずソーダ ミュージック APP を開き、メイン ページの下部にある [音楽] 機能エリアをクリックします; 2. 次に、再生ページに入り、 をクリックします右下隅の [3 つの点] アイコン; 3. 最後に、下の機能バーを展開し、[ダウンロード] ボタンを選択してローカル音楽に追加します。

C# の雇用の見通しはどのようなものですか? C# の雇用の見通しはどのようなものですか? Oct 19, 2023 am 11:02 AM

初心者でも経験豊富なプロフェッショナルでも、C# をマスターすることでキャリアへの道が開かれます。

PHP でローカルに保存した後、リモート画像に透かしを追加して保存するにはどうすればよいですか? PHP でローカルに保存した後、リモート画像に透かしを追加して保存するにはどうすればよいですか? Jul 11, 2023 pm 11:48 PM

PHP でローカルに保存した後、リモート画像に透かしを追加して保存するにはどうすればよいですか? PHP 開発では、リモート画像をローカルに保存する必要が生じることがよくあります。場合によっては、著作権を保護したり追加情報を追加したりするために、保存した画像に透かしを追加する必要がある場合もあります。この記事では、PHP を使用してリモートの写真をローカルに保存し、保存された写真にウォーターマークを追加する方法を紹介します。 1. リモート画像をローカルに保存する まず、PHP のファイル操作機能を使用して、リモート画像をローカルに保存する必要があります。簡単なコード例を次に示します: &

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

現在、人工知能(AI)技術の開発は本格化しており、さまざまな分野で大きな可能性と影響力を発揮しています。本日、Dayao は、参考にしていただけるよう、4 つの .NET オープン ソース AI モデル LLM 関連プロジェクト フレームワークを共有します。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel は、OpenAI、Azure などの大規模言語モデル (LLM) を統合するように設計されたオープン ソース ソフトウェア開発キット (SDK) です。

Win11 APK インストールガイド Win11 APK インストールガイド Jan 03, 2024 pm 10:24 PM

ご存知のとおり、Microsoft は win11 で Android アプリケーションを実行し、ローカル APK をインストールできるようになると発表しました。しかし、Win11 をアップデートした後、ユーザーはローカル APK をインストールする方法がわからないことに気づきました。実際、これは Microsoft がまだ行っていないためです。この機能はまだwin11に実装されていないため、使用するには機能がインストールされるまで待つ必要があります。 win11 にローカル apk をインストールする方法: 1. Microsoft によると、win11 にこの機能がインストールされた後、ダウンロードした apk ファイルを直接ダブルクリックして直接インストールできます。 2. インストールが完了したら、ユーザーはシステム内で直接実行することもできます。 3. これは win11 の正式バージョンですが、Microsoft はまだこの機能を win11 に実装していません。 4. ユーザーが win11 を使用したい場合

開発者向けの .NET パフォーマンス最適化テクノロジ 開発者向けの .NET パフォーマンス最適化テクノロジ Sep 12, 2023 am 10:43 AM

.NET 開発者は、高品質のソフトウェアを提供するために機能とパフォーマンスを最適化することの重要性を認識する必要があります。提供されたリソースを巧みに活用し、Web サイトの読み込み時間を短縮することで、ユーザーに快適なエクスペリエンスを提供するだけでなく、インフラストラクチャのコストも削減できます。

Java フレームワークと .NET フレームワークのパフォーマンスの違い Java フレームワークと .NET フレームワークのパフォーマンスの違い Jun 03, 2024 am 09:19 AM

同時実行性の高いリクエスト処理の点では、.NETASP.NETCoreWebAPI は JavaSpringMVC よりも優れたパフォーマンスを発揮します。その理由としては、AOT の早期コンパイルにより起動時間が短縮され、開発者がオブジェクト メモリの割り当てと解放を行うため、より洗練されたメモリ管理が行われます。

CentOS7でローカルループバックアドレスを追加するにはどうすればよいですか? CentOS7でローカルループバックアドレスを追加するにはどうすればよいですか? Jan 13, 2024 pm 08:00 PM

1. ipaddradd10.10.1.1/32devlo:1 を一時的に追加し、再起動後に失敗します 2. 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