ホームページ >バックエンド開発 >C#.Net チュートリアル >C# でローカル プログラムを自動的に更新する方法の分析例
システムの自動アップデートについて。最近、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 サイトの他の関連記事を参照してください。