From cdcbf03d920cb0653961433aa681adc4511998a3 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Tue, 20 Aug 2024 22:43:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- updater/App.config | 6 + updater/Form1.Designer.cs | 111 +++++++++ updater/Form1.cs | 204 ++++++++++++++++ updater/Form1.resx | 293 +++++++++++++++++++++++ updater/OfficeKiller.cs | 42 ++++ updater/OfficeStarter.cs | 57 +++++ updater/Program.cs | 21 ++ updater/Properties/AssemblyInfo.cs | 36 +++ updater/Properties/Resources.Designer.cs | 71 ++++++ updater/Properties/Resources.resx | 117 +++++++++ updater/Properties/Settings.Designer.cs | 30 +++ updater/Properties/Settings.settings | 7 + updater/Properties/app.manifest | 73 ++++++ updater/RegistHelper.cs | 52 ++++ updater/UpdateData.cs | 22 ++ updater/UpdateModel.cs | 10 + updater/av802-h1xg6-001.ico | Bin 0 -> 101141 bytes updater/packages.config | 4 + updater/updater.csproj | 118 +++++++++ 19 files changed, 1274 insertions(+) create mode 100644 updater/App.config create mode 100644 updater/Form1.Designer.cs create mode 100644 updater/Form1.cs create mode 100644 updater/Form1.resx create mode 100644 updater/OfficeKiller.cs create mode 100644 updater/OfficeStarter.cs create mode 100644 updater/Program.cs create mode 100644 updater/Properties/AssemblyInfo.cs create mode 100644 updater/Properties/Resources.Designer.cs create mode 100644 updater/Properties/Resources.resx create mode 100644 updater/Properties/Settings.Designer.cs create mode 100644 updater/Properties/Settings.settings create mode 100644 updater/Properties/app.manifest create mode 100644 updater/RegistHelper.cs create mode 100644 updater/UpdateData.cs create mode 100644 updater/UpdateModel.cs create mode 100644 updater/av802-h1xg6-001.ico create mode 100644 updater/packages.config create mode 100644 updater/updater.csproj diff --git a/updater/App.config b/updater/App.config new file mode 100644 index 0000000..b50c74f --- /dev/null +++ b/updater/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/updater/Form1.Designer.cs b/updater/Form1.Designer.cs new file mode 100644 index 0000000..220bc48 --- /dev/null +++ b/updater/Form1.Designer.cs @@ -0,0 +1,111 @@ +namespace updater +{ + partial class Form1 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.LabelLog = new System.Windows.Forms.Label(); + this.ButtonUpdate = new System.Windows.Forms.Button(); + this.LabelLocalVersion = new System.Windows.Forms.Label(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.SuspendLayout(); + // + // LabelLog + // + this.LabelLog.BackColor = System.Drawing.SystemColors.ControlLight; + this.LabelLog.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LabelLog.Location = new System.Drawing.Point(52, 52); + this.LabelLog.Name = "LabelLog"; + this.LabelLog.Size = new System.Drawing.Size(340, 100); + this.LabelLog.TabIndex = 0; + this.LabelLog.Text = "正在检测"; + this.LabelLog.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.LabelLog.Click += new System.EventHandler(this.LabelLog_Click); + // + // ButtonUpdate + // + this.ButtonUpdate.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(100)))), ((int)(((byte)(215))))); + this.ButtonUpdate.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(100)))), ((int)(((byte)(215))))); + this.ButtonUpdate.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Blue; + this.ButtonUpdate.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(100)))), ((int)(((byte)(215))))); + this.ButtonUpdate.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.ButtonUpdate.ForeColor = System.Drawing.Color.White; + this.ButtonUpdate.Location = new System.Drawing.Point(183, 198); + this.ButtonUpdate.Name = "ButtonUpdate"; + this.ButtonUpdate.Size = new System.Drawing.Size(78, 31); + this.ButtonUpdate.TabIndex = 1; + this.ButtonUpdate.Text = "立即更新"; + this.ButtonUpdate.UseVisualStyleBackColor = false; + this.ButtonUpdate.Click += new System.EventHandler(this.ButtonUpdate_Click); + // + // LabelLocalVersion + // + this.LabelLocalVersion.Location = new System.Drawing.Point(172, 232); + this.LabelLocalVersion.Name = "LabelLocalVersion"; + this.LabelLocalVersion.Size = new System.Drawing.Size(100, 23); + this.LabelLocalVersion.TabIndex = 2; + this.LabelLocalVersion.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(52, 159); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(340, 10); + this.progressBar1.TabIndex = 3; + this.progressBar1.Visible = false; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(438, 286); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.LabelLocalVersion); + this.Controls.Add(this.ButtonUpdate); + this.Controls.Add(this.LabelLog); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "AI校对王更新"; + this.Load += new System.EventHandler(this.Form1_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label LabelLog; + private System.Windows.Forms.Button ButtonUpdate; + private System.Windows.Forms.Label LabelLocalVersion; + private System.Windows.Forms.ProgressBar progressBar1; + } +} + diff --git a/updater/Form1.cs b/updater/Form1.cs new file mode 100644 index 0000000..93286d9 --- /dev/null +++ b/updater/Form1.cs @@ -0,0 +1,204 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing.Design; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Text; +using System.Web.UI.Design.WebControls; +using System.Windows.Forms; + +namespace updater +{ + public partial class Form1 : Form + { + private int localVersionCode = 0; + private UpdateModel model; + private static string applicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; + private string versionFilePath = applicationBase + Path.GetFileName("version.json"); + private string updateDir = applicationBase + "update\\"; + private string updateInfoUri = "https://file.wx.wm-app.xyz/jdw/latest.json"; + private string updateSource; + + public Form1() + { + InitializeComponent(); + string source = File.Exists(versionFilePath) ? File.ReadAllText(versionFilePath) : null; + if (source != null && source.Length > 0) + { + UpdateModel update = JsonConvert.DeserializeObject(source); + this.localVersionCode = update.VersionCode; + LabelLocalVersion.Text = update.Version; + } + } + + + private void ButtonUpdate_Click(object sender, System.EventArgs e) + { + if (CheckHostAppRunning()) + { + return; + } + progressBar1.Visible = true; + if (!Directory.Exists(updateDir)) + { + Directory.CreateDirectory(updateDir); + } + string updateFileName = updateDir + Path.GetFileName(model.UpdateFile); + // 判断是否已经存在升级包 + if (File.Exists(updateFileName)) + { + ExtractUpdatePackage(); + return; + } + DownLoadFile(model.UpdateFile, updateFileName); + } + + public bool CheckHostAppRunning() + { + Process[] array = Process.GetProcesses(); + foreach (Process item2 in array) + { + if (item2.ProcessName.Equals("wps")) + { + MessageBox.Show("检测到 WPS 正在运行中,请关闭后再执行更新操作"); + return true; + } + else if (item2.ProcessName.Equals("WINWORD")) + { + MessageBox.Show("检测到 Word 正在运行中,请关闭后再执行更新操作"); + } + } + return false; + } + + private void LabelLog_Click(object sender, System.EventArgs e) + { + + } + + public void CheckUpdate() + { + HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(updateInfoUri); + HttpWebResponse resp = (HttpWebResponse)httpWebRequest.GetResponse(); + // 获取响应内容 + if (resp.StatusCode == HttpStatusCode.OK) + { + Stream receiveStream = resp.GetResponseStream(); + StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); + updateSource = readStream.ReadToEnd(); + if (updateSource == null && updateSource.Length == 0) + { + LabelLog.Text = "获取更新信息失败"; + return; + } + resp.Close(); + UpdateModel update = JsonConvert.DeserializeObject(updateSource); + ProcessUpdate(update); + } + } + + private void ProcessUpdate(UpdateModel update) + { + LabelLog.Text = update.Log; + this.model = update; + if (update.VersionCode > this.localVersionCode) + { + ButtonUpdate.Enabled = true; + } + else + { + ButtonUpdate.Visible = false; + LabelLocalVersion.Text = "当前是最新版本"; + } + } + + private void Form1_Load(object sender, EventArgs e) + { + ButtonUpdate.Enabled = false; + CheckUpdate(); + + } + + public void DownLoadFile(string url, string filename) + { + try + { + WebClient client = new WebClient(); + Uri uri = new Uri(url); + + client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback); + client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCallback); + client.DownloadFileAsync(uri, filename); + } + catch (Exception e) + { + MessageBox.Show(e.Message); + } + } + + private void DownloadProgressCallback(object sender, DownloadProgressChangedEventArgs e) + { + this.BeginInvoke(new Action(() => + { + progressBar1.Value = e.ProgressPercentage; + })); + } + private void DownloadFileCallback(object sender, AsyncCompletedEventArgs e) + { + this.BeginInvoke(new Action(() => + { + ExtractUpdatePackage(); + })); + } + + private void ExtractUpdatePackage() + { + progressBar1.Value = 100; + string zipFilePath = updateDir + Path.GetFileName(model.UpdateFile); + // 可以考虑备份旧文件 + //string destinationFolder = Path.Combine(applicationBase, "update\\old"); + //CopyDirectory(applicationBase, destinationFolder); + //ZipFile.ExtractToDirectory(zipFilePath, applicationBase); + using (ZipArchive zip = ZipFile.OpenRead(zipFilePath)) + { + foreach (ZipArchiveEntry entry in zip.Entries) + { + // 采用覆盖模式进行解压 + entry.ExtractToFile(Path.Combine(applicationBase, entry.FullName), true); + } + } + MessageBox.Show("更新完成"); + // 保存日志 + File.WriteAllText(versionFilePath, updateSource); + this.Close(); + } + public static void CopyDirectory(string sourceFolder, string destinationFolder) + { + Directory.CreateDirectory(destinationFolder); + string moduleName = Process.GetCurrentProcess().MainModule.ModuleName; + FileSystemInfo[] fileSystemInfos = new DirectoryInfo(sourceFolder).GetFileSystemInfos(); + foreach (FileSystemInfo fileSystemInfo in fileSystemInfos) + { + if (fileSystemInfo is DirectoryInfo) + { + if (fileSystemInfo.Name != "update" && fileSystemInfo.Name != "logs") + { + if (!Directory.Exists(destinationFolder + "\\" + fileSystemInfo.Name)) + { + Directory.CreateDirectory(destinationFolder + "\\" + fileSystemInfo.Name); + } + CopyDirectory(fileSystemInfo.FullName, destinationFolder + "\\" + fileSystemInfo.Name); + } + } + else if (!fileSystemInfo.FullName.EndsWith(moduleName)) + { + File.Copy(fileSystemInfo.FullName, destinationFolder + "\\" + fileSystemInfo.Name, overwrite: true); + } + } + } + } +} diff --git a/updater/Form1.resx b/updater/Form1.resx new file mode 100644 index 0000000..a4b6ac6 --- /dev/null +++ b/updater/Form1.resx @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + YII= + + + \ No newline at end of file diff --git a/updater/OfficeKiller.cs b/updater/OfficeKiller.cs new file mode 100644 index 0000000..1ec90d3 --- /dev/null +++ b/updater/OfficeKiller.cs @@ -0,0 +1,42 @@ +using System.Diagnostics; + +namespace updater +{ + public class OfficeKiller + { + public void KillWordProcess() + { + Process[] processesByName = Process.GetProcessesByName("WINWORD"); + foreach (Process obj in processesByName) + { + UpdateData.GetInstance().ShouldRebootMSOffice = true; + obj.Kill(); + obj.WaitForExit(); + } + } + + public void KillExcelProcess() + { + Process[] processesByName = Process.GetProcessesByName("EXCEL"); + foreach (Process obj in processesByName) + { + obj.Kill(); + obj.WaitForExit(); + } + } + + public void KillWPSProcess() + { + Process[] processesByName = Process.GetProcessesByName("wps"); + foreach (Process process in processesByName) + { + UpdateData.GetInstance().ShouldRebootWPS = true; + if (!process.HasExited) + { + process.Kill(); + process.WaitForExit(); + } + } + } + } +} diff --git a/updater/OfficeStarter.cs b/updater/OfficeStarter.cs new file mode 100644 index 0000000..96f4bb8 --- /dev/null +++ b/updater/OfficeStarter.cs @@ -0,0 +1,57 @@ +using Microsoft.Win32; +using System.Diagnostics; + +namespace updater +{ + public class OfficeStarter + { + public void StartWPS() + { + if (UpdateData.GetInstance().ShouldRebootWPS) + { + string text = RegistHelper.GetRegistData(Registry.CurrentUser, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Kingsoft Office", "DisplayIcon"); + if (string.IsNullOrWhiteSpace(text)) + { + text = RegistHelper.GetAllRegistData(RegistryHive.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Kingsoft Office", "DisplayIcon"); + } + if (!string.IsNullOrWhiteSpace(text)) + { + text = text.Substring(0, text.LastIndexOf("WPS Office")) + "WPS Office\\ksolaunch.exe"; + Process.Start(text); + } + } + } + + public void StartMSOffice() + { + if (UpdateData.GetInstance().ShouldRebootMSOffice) + { + string allRegistData = RegistHelper.GetAllRegistData(RegistryHive.LocalMachine, "SOFTWARE\\Microsoft\\Office\\16.0\\Word\\InstallRoot", "Path"); + //检查2016 / 2019 / 365版本路径 + if (string.IsNullOrWhiteSpace(allRegistData)) + { + allRegistData = RegistHelper.GetAllRegistData(RegistryHive.LocalMachine, "SOFTWARE\\Microsoft\\Office\\15.0\\Common\\InstallRoot", "Path"); + // 检查2013版本路径 + } + if (string.IsNullOrWhiteSpace(allRegistData)) + { + allRegistData = RegistHelper.GetAllRegistData(RegistryHive.LocalMachine, "SOFTWARE\\Microsoft\\Office\\14.0\\Common\\InstallRoot", "Path"); + // 检查2010版本路径 + } + if (string.IsNullOrWhiteSpace(allRegistData)) + { + allRegistData = RegistHelper.GetAllRegistData(RegistryHive.LocalMachine, "SOFTWARE\\Microsoft\\Office\\12.0\\Common\\InstallRoot", "Path"); + //检查2007版本路径 + } + if (!string.IsNullOrWhiteSpace(allRegistData)) + { + allRegistData += "WINWORD.exe"; + //MSOffice启动路径 + Process.Start(allRegistData); + } + // 未能从注册表找到MS Office 安装路径 + // 没有找到 直接不处理了 + } + } + } +} diff --git a/updater/Program.cs b/updater/Program.cs new file mode 100644 index 0000000..023de71 --- /dev/null +++ b/updater/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace updater +{ + internal static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/updater/Properties/AssemblyInfo.cs b/updater/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2b4efe0 --- /dev/null +++ b/updater/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("AI校对王UPDATER")] +[assembly: AssemblyDescription("AI校对王更新程序")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("果麦文化")] +[assembly: AssemblyProduct("AI校对王")] +[assembly: AssemblyCopyright("Copyright © 果麦文化 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("73ac658d-cd49-4731-8491-a7bdbc811559")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/updater/Properties/Resources.Designer.cs b/updater/Properties/Resources.Designer.cs new file mode 100644 index 0000000..bc9adc2 --- /dev/null +++ b/updater/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace updater.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("updater.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/updater/Properties/Resources.resx b/updater/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/updater/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/updater/Properties/Settings.Designer.cs b/updater/Properties/Settings.Designer.cs new file mode 100644 index 0000000..8131288 --- /dev/null +++ b/updater/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace updater.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/updater/Properties/Settings.settings b/updater/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/updater/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/updater/Properties/app.manifest b/updater/Properties/app.manifest new file mode 100644 index 0000000..5a95963 --- /dev/null +++ b/updater/Properties/app.manifest @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/updater/RegistHelper.cs b/updater/RegistHelper.cs new file mode 100644 index 0000000..b655bfe --- /dev/null +++ b/updater/RegistHelper.cs @@ -0,0 +1,52 @@ +using Microsoft.Win32; +namespace updater +{ + internal class RegistHelper + { + public static string GetRegistData(RegistryKey rtype, string path, string name) + { + RegistryKey registryKey = rtype.OpenSubKey(path, writable: false); + if (registryKey != null) + { + if (registryKey.GetValue(name) != null) + { + return registryKey.GetValue(name).ToString(); + } + return string.Empty; + } + return string.Empty; + } + + public static string GetAllRegistData(RegistryHive rtype, string path, string name) + { + RegistryKey registryKey = RegistryKey.OpenBaseKey(rtype, RegistryView.Registry32).OpenSubKey(path); + if (registryKey == null) + { + registryKey = RegistryKey.OpenBaseKey(rtype, RegistryView.Registry64).OpenSubKey(path); + } + if (registryKey != null) + { + return registryKey.GetValue(name).ToString(); + } + return string.Empty; + } + + public static void WriteCURegedit(string name, string tovalue) + { + Registry.CurrentUser.OpenSubKey("SOFTWARE", writable: true).CreateSubKey("mine\\WordAddInTest1").SetValue(name, tovalue); + } + + public static void DeleteCURegist(string name) + { + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", writable: true).OpenSubKey("mine\\WordAddInTest1", writable: true); + string[] subKeyNames = registryKey.GetSubKeyNames(); + for (int i = 0; i < subKeyNames.Length; i++) + { + if (subKeyNames[i] == name) + { + registryKey.DeleteSubKeyTree(name); + } + } + } + } +} diff --git a/updater/UpdateData.cs b/updater/UpdateData.cs new file mode 100644 index 0000000..1a9c2c3 --- /dev/null +++ b/updater/UpdateData.cs @@ -0,0 +1,22 @@ +namespace updater +{ + public class UpdateData + { + private static UpdateData instance; + + public string CurrentVersion { get; set; } + public string LatestVersion { get; set; } + + public bool ShouldRebootMSOffice { get; set; } + public bool ShouldRebootWPS { get; set; } + + public static UpdateData GetInstance() + { + if (instance == null) + { + instance = new UpdateData(); + } + return instance; + } + } +} diff --git a/updater/UpdateModel.cs b/updater/UpdateModel.cs new file mode 100644 index 0000000..163393d --- /dev/null +++ b/updater/UpdateModel.cs @@ -0,0 +1,10 @@ +namespace updater +{ + public class UpdateModel + { + public int VersionCode { get; set; } + public string Version { get; set; } + public string Log { get; set; } + public string UpdateFile { get; set; } + } +} diff --git a/updater/av802-h1xg6-001.ico b/updater/av802-h1xg6-001.ico new file mode 100644 index 0000000000000000000000000000000000000000..ed9fb25dc8d2225987d1f39be9c5673ad2585390 GIT binary patch literal 101141 zcmeEP2Rv5a8@~uiN=ZaRTE8@;A*G_CrKJ*;k*!ojqGhy2G*R{_lBA(hLS@S+Gs#{d zTekQAJeODUt9}xVf9~h=eb2r3z4x5+Jl}JkbIxQ>O{b>jbX}AG4ykB7oK|D~PA^w45xE0Q{o`--S zAfB&n%1#kPC(MRpAHXfZ%ufHcN7MN{9FG7T0%QUxZODM|0Du$FIUVXTGyEq9hz3ya z>l{YGe_H_q0Mz?vV1FUtE}$OJ`JT?lb#M*JH6MWYvH`*YBPKVIh?nocpg z6Hn2+_L5@uD4Ajv_?DvR7*25rPNy8W^@@xauLYnkKD!^UI|}JMO)i9ZGAIEM?(>W# z@3#+rM=`h+_s#n;UJchMid$F)DTf2xgXd6|uHKJ%F!xKQ1ig7rG4y#&rj7SwT>q7S zGA&3C_2dHiS9ghQPyfQxHM?|&09F7kU>V>k zpb60NnlJ4)!Zl9-VgS6CS`IO;9e^ajm+r%J2>>+!mK*AQokJe@?=+wQK#eCK_D=xD z06x1ODUJbQQ{cQUpaSq;@pbqA zGKkv>FiF`dyj>S?+#hfs(A{{y_dXA0r%2Q_H4oTtz#ihE=h<(&T;%DE?RDB~fQIF^atP9Nh(8}Kso1I6yeJIeFaB8n^Y#XHK5*YuYB7&oScbus%x4OzeRKJRmr zI_S;xF>Wo7Xfl1QcX&+IJ2fQJ2iy1deI<-3J{!|?zP3yCpBgVU#Q1T%Vgh!jv+nU4 zsy%*`kWbp=FXgcHr+;eN6{(@ShTZ1@KANFqZ1hhU0gzDWBqL-5&#Sp9FLq6Xn3M31B4P)AgM=?oJ-? zp3Zqtbs+s?iy$rJ1a&=6*|D|Us5-`w=_|SfcPTlFF%5-65R@i@5Gf~!!I=cXXpAm{ z9^Np{AaIFb8kklKq={*xKU5T83~2XL;E7+bflVY-ox?lpn-lbV7_bk3KCO0sRU9J; z^=sWLTfacOZzieaLbX5b@?o2_0q`7v^&Z;=92c(wkYgvbQKX%64*h1_zw@7JF2Fa~ zL&bKx7m2=SA%Hue2GH5o;P~7DFk@?*Uq#8a&41t+^*f9DS>9A2uOI{Ik0HZW`!N>w zJNr00%TGPVw$Tvqxy=K=f~IZP?fhq%`UwY{d|rXSrQP2{t;<6|4)h;>t8Jmm-8sa* ziUOd$&A~dM=o(F^x&1zRprz{vb@el!4|0$782y!9ZQDD`PCc%JII!=y1n^m#uh`~i z`w7&3H3=24>1f-Pouf&<6|a&$cLB&N*5jV^w|#*4E&(QgYO~SL7fEco{pzdv>#aX_ zS-+*0?~WnXS0ez{Un+k+9i~CtdVtUSyr2gLQ|N8<@&@yK(ARv`QD)r7`l$fG`r6a- zeks0YNGAla8SvSdV~=$pA%ES!SG1rEeG;(zV! z)-$YcKU<#eriXqFXTYq@-mN-Na>0Hn+V3y-rMG!NzpAxvQ^#rJ;eK-f*01j7<5%C8 z3wbvIj0Uuq1+?RxH(B>+s4Jvx!}_xefc5ED=f9`Yj|Ewj0670kwqu>;C(pOq&!e#a zJJ<2<>ID5~XdlUX@Fn?mEwghf{*UEH-}6`b?~|Xjk>ABX z&KDt|?d*2hr^fNEa@Un>zIA`we?7`S&R3bhJTUzeI^Yrg4YX58f#ebE-9+e-9nTzU)OiOzteG#%8zklo}EI{Ne*!x19c5=r*!|7PrMJ; zo#2M+UcNT>{kzLg&0l``M@mh76Xk?&;(wL_EH`^#{n0z9GiW=o4tw|R#>r67N^TImxwYK9=kRRp6cCZraacOlu<$6RWxt;{q z@P7@sz702AxBoTnsk)`wzu%RA%%>`}(P8h3NtwF(gLS6U8vlRUi9dmVlpi_7b!%9k ztLqvmxR%K~CWmsn6MSNGC^@jc54ZcTq0NJP@&2#jPmv$x*ah_%*Jw62wZK}!6bjaJ z)C(186R<27l-E+KY8%Nq^R2RvI{8!NrP`^d(08MRz==DYLppC&)%A7#aL+_>R$Z3%lf6`KT&?<_98sL*92u9`#C$IU7+?4v0eOV3Q`$*P_W8lN+YS~Af{E6~ozEMW>iL^i+z;Qchw(Ycj*%1>~a4OHJ@J#@%a`U=Ny1%jZl`aUH7%~)P5sAE9DiPP5Mo~ zw+wZN`=`r~X=Aznnt!W9-oB|DEIZvPKb_+LCG!6OU*FV8C)v7k?KkCDb^ZSNpKj!# zEBWlLYYZX3U!VVLo&Ub@hspFkx-$5t{G@IoCc`y$0DR8nd*c3`uPp&tkXKxX{a^g! zGep#9b8uZgt{eEBW&2j%aQ*NdfGDgBB%hCm{V&R|4r{9A-EjTxXKR^R;d(VdJm6dD z{Eq)cL7wFR`0N|`To|s6-0l_v>tDXS1`5}N;My--!>{zY9(W**lYo4{?JY_*1 z4+FRXz-KE^cDZX^UmL4TeRo4!2s)#IxC8;$0M&qwY5orTXs^(2@vBg|b7_?w*DZHv z+i4v}?66L5*CE7>`}j@=Nx(Azt~dPEvZH-MJGBCUcB?(VYIflS$N1^p5&g4!G$0;) zUreXx9EL$!+JHBJU!{ZBkT%*Uv{UVJE5q|c>W;5Jlc6ULw!5~yQ|R+`#uFj!bAV#N z&(Z_hp_2d}04cYceK@flo|nRU-rJi}+nR8E))v!;=e)3OSp>jmkZS?Gr3bV-XnzEi z+{ow2ApO>Lt+>ARXKtz>_fGq^GS{XD$QLtUDpJ<*`VAu>ZwCMwfFCUjXkWAdXm7~!Muwns7*GEzKfme(=81f6)i$2Y zW1Fp<2IsE;$^hT12ec=afQfC-tdsF#{Z?`P_WP!Ol@2gn>hmI0+W>jTHfb5)A)qUL zX|x|`M;1c4BA;u4eNuJ}c%Rdsu>c^R=YO$3P3=p!mE+MM8?G_OXZxvocnAA9HbuM9DmOk;3HN&(KiDzK zKXPCGT6C*zunX^p^;g-6>_-TLtoH$4fSJ^HrR}nMM~*-6d9$CffomS$RDc`4IRG|% zivWiBMga_i;Ozn!LT>Ovc)=P(GBIQ%FC#C+!`Am6V2JNNz->$>84!#? ztsz}sNGjs1dT7%dzS99We6Is;MigTVfQU>CLGM%^$P0lN@-a{d+Ige$2p5jQ^AM8} zhONBgdm@Z6DtI$R`+Fkr;4j=1;av@TUE)ZaMSb=Ue7E=<*r`xq@HyAB0BoyL0S5u2sn3~iyYUj< zM}W`2gH3mc`TtVNUm%SNId;MJIFc|u7Kh_l@NN~N($A!M)jew_sdO%0+JMN<& z;uc^j_(B*UB>Sv59;H2fkl1@Z_s>_*|EUBNf{!Mj7+d|1f6s$)35%V8eC1yBy? z$o04O3*cJx{Y_P9^9kZJ)bJiLXh+az`g46!|EHAoh**l(o)gMw+ezNr-s=GN9=OBj z+)n_q0pH^KTmRv+;yTcdj8JTwb5Oi$N624`B4lpH5NjSJ_J|C9k$k@fl$>9Joqq|w z@t4FNn?TY|16SDQqd!p{5Cdoie2d?%{D;1+K!6nVBL<@H0_RM&!ps645 z4|ycZMAzTV)YJOxE9@%(!T>mS|6cxj>Uvy< z^$4&A#*0kUbrh;Ff2?q=^&P2SdoR=f3rD>rhbqj4j(?v+`d_w_@3JA$|L9Z>j13E?%-f2lX9os0zGm7<5Xk zzMqO~)TRQ?0}25@%2#jQpALC5g#HK*_5IMQ&^I7ufj*1;wZ6W=*9t89XHjRk21$|Z z*W)@6avaYEI@JaIDerB=_6Xk;JCW`c} zwZEgW_5HJ(L5D#A9E0~(o$al7Yaq`)fMwt#U~KIZ;+ncJVy8_!tjP}eE4l6{Gs)IjjG@VQc;c8E$JV{g#jlDVzYFplumvy({Z|kI za1B1#zaD(Q_wQDg$meg`<%PQ6>a)f7Pp<{|0dOq+t9bd@=~jZQ9)Lx_J+7mLGSK>6 z6~WLXLgQ-m??zv@^P>#&@M^HW7vC>W^^btOI7XfWum|AS`Dg3@cS$c7WH$r+v(u4W zmqhxy&>pCQEigNBzuS8M)i<+TPGnuW=E#aDZI35a60z?9SrO)

k<9_~xaObMS9h1aMuHqU&?gw*mPk zxmR%^zqvRajxPal4BW@<_vs)5baoWLt3=vQ;2(TPsxVH#wajXEzrK&C?G-|DjcwM} z8=rkYY9!=)KLE$PeY|&H2e^JI3ZMexgQ58B5bP5>t|X9SXbsz*e-^r{#$`M7O=Pb} z6FaZq_u9bjL%D=fv>$l_nfqfjq<^lS6|2aBH1zjJ2dN+z(_Y9nTk=%}9NYvfhG!HQKFu?S6G!w* zpuTqRTjRKnaXYMYr_NQvJ{{N>AxOsw(4F^Q{4IR^Dmn9k7YhKNl6&ho0rp9Ijb-9{ zH}u`&b99?-y{3Wt$3a}j0GWVaC0}2^TU29 zpeLTC>Ep0#9R8@DaJ>|?3FN#w@c8|HV=Dg;t^)M=ZGR4LKgxT@``-fZyvY3z^1l-J z?;F$qdHjR#H4^4p`}l|Q+p%8!E&F}^|DC*3%Xc6Def;;?|G&2k^ws~rmwRjj`uOkT zzt8^vy=CB!sQ>uwr;gv$?#{QgdSZOnQ~Br^PY-<8irSa&PWapNkKYr;Z^S!?rc<0k z(kYIBL$|y4J+&Vx1DKC<@C{q1j`{e`@4A7XoU+3$igGzHm6QeLx$-QnTi*u!5m`Fi z``h!6dA%E#OKEOtA%Wl040`kahrcP;K?na?Z?KLU-HE3Z!*>WF8zf5LTlXEm@!Xa8 z&~E8^#!#~18|Wwp#)a`5zWurgq zZ@9y^t-nyGzIu*Y|NHp=Hs76fiuD}7ACG#cZpeqOXV$9%I@L!Rh3;>#1oc zDtHt_wi2U2=#{Fkwv{zw?_EBx+TYk z(XDj*`0pP7SPrlrx`N)DfOqPKydXcw6Sb`LWQb{6JWio}tp8+p(01>KZ=2(P-o)2idFZ&2W5FKm10YZPU~G}~p{6|<9D7`Rno3dp&M{v{ zd(_AOkMoZ<0C}iu{M08yo{%rpZ%2K1cOTP0KQoRos9Q=w1!d3m=pRa>kN+R%2X(l| zJ(`kIP)VhRfV@-$~}gC_5a7YM?E6{$OrO5-Rc{gDT#UI zl<2HdO3V)c@9#Lq#P}b^=l4jv(#L<#@K3E%j}r2!^!HkbV~rEOi9c-n`|5wsa*s9u zd8z0y7VM2e5RndJKG&!o@iF$*|DG!YI6l_^ULrF-d`3Ht(+VqUDFxq)@>+5(zGI)F z4%(E<0Wju+vPQKzKN9xw-*fyU56BCyrNOqJx?$UW4Au+acu?C1?lS zBYu3$N6jmSef;+<|EN>s&K>G)N4p)JSxVXQ9c?zoar$8rrK+xxT8tkGP^{U5g ze;@xn&pnm@gRl-0+k5I(S=&fC{UE8!+`+qRC{L0Kskf7%UqS%|-f7Vzb|3TE$A8c2 zlB!b-k*CLr1)uTv1dhAHAJ%;=KiFraZk4qSlv59SX3WTf8;~kBbxH|{lEK< z-@31J8S3hBAOF3>Kk6U(!hV0pv0y6jisJ*+`%Ok(Y zb7vcXV*?!Hb=+_ah-1O8@%N+W`}prY-BP(h{`@n`agzP77oDtG5UC@8~T1s z!3Wg2oOHbJNB8^q?|uG}Kjg8aFR%0Z4ZP+$_;x?@8N$3jKAYRqW4?}MrjP&L=O6h) z9&rr_bwi$Uy%6$_9N_vfoZF#p4NcADbJ)FE_pu!G@!$LWqn?q+tMFVs@=D!sy&&?A z?~%9!bGkUUOWoeVm|^dYn6Hi#JJ#VJ+3(~3=kSkuMn2yae;NxS-?(lV*Y}0PnhxrQ zV}+Y9vwNNUzWV=jxTn@nECXJ^>!%f>6iO&OLyq%&9iJa5s;v8I&)@ge|DRU|unjok z^O}PEQnxZ#D~4-CJNgF#l6!Z|M=g(i_5bH_Pt`fv`hb-8RQmrFR>PRj>``*Bj`^s0 z>Er+B^N%(F`9+?;w8dtZQFiw7n6HojpU*p0=QtKbe&c}W&Kr&mY@et7w7TC{|9?$6 zKpSB9;vJ>2!&nf@LPl{lMdv4s`KV>FkN;o8KlZti=Zp^TZ^ALbt>~PeGUn^!|JU%| zS?}I4IqgjVzQ@lH#s+8`I$qb?`+eiTUsD#4XTv+MDJ8%=Za@3|k<@ZU-}I~?7#Ah&!^+F%jlaz;2KqRc=qJK?(3!h{~G>rEVv8a>wr4% zC0%woUM!0p@eA|w*YHo(G1_42eqY%4{g1!A4E%NV|1amev+e8SANmD)!Xjo#DP#41qZI022Dj zz#mZtnt-QJz!m@_0Qip}zIQ|J!LLHztLYL$C^<*+K|E&x`G7ywCjP(Y`z>&D2rwEz zaz_onmw$NHhFEVIO(;6T_v2w7o~gq4=mDYtPe5Ov;P_Xb&#Ig`M7~?<(I%(EWYDDzMM} zm7OCAMHhf8aO4;T^)|9QwEycKRVTCo;Uxbm4iN7r+cFCF4FIWt-&IHdkNIi_eMbY- zppVB!_S1k9CFfU!-1R6z+AEe=^C0nGJpSkjH2r0UR(Lo5@M-oZ^dHXP8gOB%r^48NAs5oJp5D9$* zv_07NkZr_J$eS`C3V?R%|3UY^Qigiap+8^)*j#26sN-mRm7wmcI7E`@X;&e}MiY?2|x0WdP)TJ>W5*4)7<}$==L6`c!TJM4&yT zC;cusjsrc;w=pM_-M-(C*Ih1uk-!0$HP8#?~muY%4c`4TXR2|IBVkB?n44u z(LaU0k!2SKq(ueJEpVKc;ou z*m@kn0{$Zz*nbZA8+^&=8$ln*azOk19FC>8xrf16`q}SFUytNV+3f|`0km)7gu=Df zKCL2*V?h_(06jno;CHUK-OU^NLeM9o4CA<=D&Vt&eekCSlYSg*^Oc|s{4E7jX=Ke6m6 z!+a8b3x&|I1)G3=4QwNvNxLWx`?mo#fZvVJuI2}Q9u5FO7z>j=TlA0MT)GPQN~G^3 z{E3wHc%IcAVu&4AUqjy~x^>(T-VZ7z5nX#(8u8iSO@)F^nJ9J zYw*=?hxs%4Yk!ZO|DM8v^VP~wFA!=DuSlJtT>$;@01N@|0Kb~sZ>5hujaL9oz;I>s z&qIAzyP5zY_`wj4vEQSTzw+9x7oon`gWmw^jUrhl$Z;_(vG| z10kQ!XZ+G=4=R4%CMG=yB`}*}? zX7R_*%DRKDZvgL5&v1?r{U&M-5&eJ*VSpQ;9MD_kpb+A|0GOs`7eo4NRmu4|=(ECD zUgiJ5SO4P-{hSzZ-IIcA6rpa1ed@OHl~cq(;6@4%2tfPXQ{@1C5a^2#gFXlYgygzA zTz|F8E|J)A<@L`Ix-XT_G=Tjm?1K6F<^3!+lYcxR4DWMI3`iR^hM=KsCV>ktH4p0F2-g1Dxh9iJ6O29LO z99|_7s>)hLD z*gptJ1)$#m%R)3j127EhIfR6qrym(Ax&*_xKIHckv@b_r)IbOR2LS(r_E?7zvaoIv zIqd*i*q;x$2CxF~DLTVEJY3T{?}Ro#j93!%_KRu!Kb>rQajr2<+fHlHLJ&qBPt*~_ zn2yKg1TnbdaS%b!bv#B5bvSOqW1~+e;P%fV%*12HPyZX^@uwU?Zg6XlfQ*hHM5s5A z(RIjC5PA8h92vJBQzLAPu028!u5}yJ8et~&xJ|?$>T#Qh)WbFr+j4_v$sD!i29L=I zf^e^OBSkc(9<_?to*O(38R!rl8DWR$$OwZz-A*dK;~_-wS#%)cXVF1~eaD|EtWO`G zsiUua^wp2g3dFzaM<@G2p%{0(9!zXz$73*f?ba2~gN6Mp0wXYZ9j}K&O3pMhfgvXz9)MoJ8BWP=3+AV6EeQ&2+guMMzj@k~X5w^E*Z4tIb*Dm51 z>h*0A8c~niL~K876|p@!3Wdy3TW;_wG6IoL*OMZCIwVD;wr1pM$WeQ4@B~EIAv*F{ zguJlr2mWu{GhM%SIm-a90ia}-l`F(HK%)e^G(>*}2xN6U)CgkA#Fb);HyNaUcz58O ztooI*`m!pAi`zcfu4>$K{7$ai&D~Zf8Mq#rFid|JnsV3eg0y+Gy(#xBHnzEHyrpL! z39#+WQ96)upYuvcbgEkM$$YM3)1)GX3(ACsTB&Sl+|XzhHLq-zky|jQ*VJj3r6yU| zvMpxKI(V}(!u6$s!(m6=bZPC#&}Y{C1+UgEipprVrZn>kJdnHaA~2C>xR>m`_vV3b z{q`>0NnbIIX^x7Rw2Aky#340L9ajmalwIK*XL$9b>=}vVg+puN^(LB_J|+tM{TUW8 z_fzM3R1k0|r6E4>#lbVdOO2Dvk1No;>)#~8S1IE2QL-j_l9EaAk>ZQzjboxmNs262 zAG#ueUWmY?IaLe{3}7@EsmPo(a=-+Y#H;;;1+Q-j zD1E6g$F4FvfOgY4Im`5CddsJWa!n{W0a;j;PuWnn$mis&z@+;pye>(8m%!Gc1uHqv6LAJ1Alorp}ah%SB>EBSWDij4C+#%nez`|TS7l2I##N+wEUdAq5SkKLy*}Yo_&i2P zaz(*KO@h@#C0hGKp=gf#kf)3?F}dps2hmVycaCEAwS(^VO6Y>c)_SY62FEiDlXzek~&eIgURZw0yn@efw;p(K@%jImVrcWnU1%JFa zH-j^1#pWev`6n6Gm#UjIcoYk-Yur@LF;EP^u( zl8Bii!`?1#dHwE+Wb)>I!!O%spQ@F}Yz`Vg$IE)}WK{CwDNL^Uv^-1Xwk0o(Im(z# zAFVjCLR{eE+RUMRB^k@4ULS3_*`K>Scis|~3s;0_We?jv+0VnrUc)LYjZY2Go1-*U z<)Xh&e&F4r2+H9bGKV7C{kHB5YC>r#1oz`7AaN115Ggx}d!lkcHGu^G)HaGjqxvYIGyv|x)`YiQ%k6H$;5SLRhoo^m_QR#V@d~?VoeTAk7 zN4A{>&HJC{q&fbgItK&7z&HYnCvZA&ZKZB9DHaJAX3y2 zxqeXH9Br+CviK*MU(4}*;q?4+vIx80ZuS@SK|)Wft7~!_uC7QLG;3I}2UF8kuQBpd zBHsl`U5d?na?Nvaor!P0$>ih(5AW5U&`j7#7lAUUQ9EZbXF4J3lgOr~WeS7+J#Z z*azF>R~Ob^_(=D9qUhNji$93)>M-(IuYRs0yH=i|?u2`Ox>zP<{)Yk`6B@5DPv6pI zuDV&YnN#(4zZablB;$BhcB;V0s3WVhG=r8KluZ|o$t`4XU>JRAb*Yr?X=R__1Z}@< zRwZ7K2+kMG88T~55#A9LM;xM6x{2N6$9mYZm8&+|DgZjz8N zdb;1oQ&2CUA`kP?&DlME)@T!VH|2S(_Sbv{6%zSka*kD_hZpt}l*v%6fW=^?#O8t;%HHH*5%+7?ZpYc^TgSRKz9D7$15kbBsMJO z$}pC)lCEE~Op2R$`*5Fe{$OK{sKk?R>huQan-va7%X`AUQi?&mn$e}fSV19h94FW7 zq%070o>f|dc0!)GOA&46+-<@>3`6IIcvdX9GexqVuY89~hHBWAk&MREjxG|k3IA|Y zViK!>4DII4Tf&@n(mEBJ)+BtKFv4c$k~PaloVBer)tRC_ZpJhaV}<|J@MFURG{p{y zPbH!}HRif{_BW21RxC>2PizO<<>Fg~AA+*Mg7R9^7}BQ|H$I~bTq0sCIF|Ns;q_>+ zxLJJj3B!AOb4-K6@-ymIo?Az&KjrXx5F$pQh$et}!K0@4+zM~@<}ACa_FS3u2+whL)%*I3xAYS&xUT0R=^r3MH88g;oiLG;UyRN%Pt~VIbS0x`LH?k_#cWqu$L(Db zJ(YG3;~wJrGC9W_|EMw(M#+{DuSRbQuTG4wZh0!J^TE=^`)n*jS7M`x^uhpR`*rWcT>Kb^ z=`3ZjX}P{>zC*Kcw3g=qmU@=lQSSFAAL*aLE@BYZ_`=2d#o!W2GbM4qqWss74V_e= zj92LOb6}libwfgaR+zlP{n_CmfqdnIAIa^vtGqurk4a$HnG@+Ik|IIUlW(xBmEa{F z3*KH%Gq#^f0B^CR--uVxQ0EKfxCNQ<9Sr0Z8TeG2$D!tqiw9XX0cyPOH&TYRF&1)7;ou4#1;;za?F5<0&Y}EGV z#as+(Lsq|8SCUc^C0Z($XLed}O~XBXyF&jHvx@f*W zV{?f}xl=Lxxtloc*mJD0k*g)QFnclPuT8zDXZL#OfL$9eH!i8WBcl~;sV=JcrYQR2 zhM?n&qRII+gvUR;8~Ddkwu=W2m}+kxrf)ZM#=s_-<1BYl3O}x%zGJz+vCW*r+DDIV zf1YkEXREbXsNU4F;O5C>LSbVTn@ee>T-dy`FM>9+kG{pCq?O0jU}IFHHLtodZ)(8D zD@+H1To{8iMOtQ0yH{Hg6D2X?j_dd}MZA)JEOkR?s47`H=4?7H=dpnE_Lzp473*~M zr=HJ<4xjt{@=dcta};0EW`;~F?oVVKA6V;qZfBvE^pv?bv~LEvL@YXLu`ypK=(b6t zd1T-TmmTx!_e{%wcT$|m_`^0WI)N3_%>*87mhzUm{KWX?-X|qOF$M$s9~K$*RK&St zAnP2?VXAMgRyeYl3lsAn=1!_Vn!h=x)=p+|%j4!^ZR@i6YXzRVy4aqb!>v2C)J$>x z_K>R;_AKUyhOk6aGH3&9gN?=odN_KWXOHJv3{>t}GZWez0u#6yl8b%xs|;6PBFO+ZV3!2<<*p^G2Hs&iVPlo zcpzcUX_-Vnr6POs)&hR_L$!hlCwZhEojA(5A^P47`I2f8X^DfGoPsa2AJ_4tLz}GavSB_l0y<~~asI0RJhW6(j z^jUM{BMV-P^4;KKWpyCx^ffM;a;3?s!@ZR<%g4BSPo3#7CajKrxZMWv;3HT*0tYMp`dt2;Q zF@sP@0j<+84<)6QTRG(QQa7er9gr|hob6}jv~eHg+t`<;<^%H$+q;?fMb^!UcH5CO zK`LYDzB94(qASlGF6Osd(7f*K^5UjE8yVU&cesz|*yYmlDD9-%c~vcLcJT#)u*8Rf zmX9Yh-`O)WZZaj+)jU<@GCQ>6TEIaO|NljTsf4t z<*e3KJ%NbO_udlny(%Kt&0zhQ=Da@>RM?4_d( z)cs|N)ib4_#E2IAUpo<&Vw}Zx=#KK?SjaWgjnEsAYjZPZ*1I)3*6+D*Kl{CVX=dE0ycPIh*8LVJ4=$AO;_8w^J6;AR%{Q87 zcsCs`smiC_KJ?8Drw6+i>1||w*z!E>pLd5IjN^stOiQ%aJ-ah!ny$uGzu>k@FZjkN zn2fnSt*+{stJX||!*d-R$GnJZvoT}c?ze|Q6EP@^i=dlo>E-c7sRJxVd=L@KcqToB zKXCI+fknr{GL*_ww$U4ftxI_QKwBzdUF_tIFdQ=R3|W`-YUZ-y!A|OBgLK9np-}E_ z=S`74S^88?d2RKa=*P!ZmL4*s5Mel4o@jEC=IpHD8{f`+m}yg@J@}ngnZY`J(FKkH zbb;#k%ho^3Sd;M3eizeYLOTXZ1d}_bh?T<27gPLMmQtR{xit#hZ+W^kWOxF6$cnCfy=`8m(h+Vl?^CRYv%oOF1oFkbkzbh%c-gP3c3 zLzPfcQ;fQPU4fX~vmr~DXQ*Tr+S<^n_g6Z+tZ|UN^Mu0q`9>iT_Xgsn7I3MX;CRW5 z7Ke9+ElTEFAJ^_z(%ljI*l&5Fj#4f2ald`f1X$wv-5%(b+SIZN#XRvNY(#f1-I_1E z)+Io@nE##8aS(2dt|3u5?U^&MwePV0GXX=F(pq7V|^aFnxkk6U_fERvy+ZXO;&7ovHwwJQ1`yF4@+LY zX`XeuApQwO^>y>|0TwF-S34hw$tx99ByV6nBT%2@SfNC}yk?By*;fHe)t^3mdU~wz z>!q;)9ARAI#YfourVCsJ54tY4B12u zLj1a*8wfGJ*nQZ@S@X4zr_>uuWx$a~75&rX|iWa$#GHE&5Uvd8>ht|Rv>t`pn+jiUBxXIx18FC}~mCy&e zgtb=`v{&!hXAA{a`+5Ln1Zc7R0VZXcu1>AOL@@bv=C!8F=^R0%1@c!c4>RKF%`#I-XCMjfv z4HCN3NWbgcG@1O&0BT|4kLyH=2}2D!(kL4Y+slWt?f1Rx>;A5}Ogu>SY!J zr{=`^9W_{k7TO3*jL;TaSH;v532U~j*Is>YwA-O|1;-P4LR|~&?cEqHhL60s%PxQG zQOpP@hj_5-?yObjBFl=)!np_5`p+tbd?+oLxpY$D5qE8g^}%3$C&(|zgX41fP%#Sn(qF={isP&ocrOx**~8Orv>s zHYqo1wZx#o?1rY6Y}&&puaf3La6wXIGRh&s4B-_X>aS6IQc)Thh}Z zE{98V?N82I>tFNSrkI!=BMVLFbz5d_0(=Z>cCU!{l2|FYc8bu%g$8yGNBHg23gg$- zQGz)e20xvzCNV=k{*o5c<2}Z7kJ!h>oZ^#Ta3D1P{WE2w=L{pV=R~tL)=*;majO)H zRCCpQD4QbWc_4;;WOGj7MTx5Vq5MbJuUM})dPl#y)YQu2 z&3R(QoVD(IlO~Kb%1I6%5jy{JG+fRqaDTdtX$70Ih1oT(Q2)6+cN@+we|z+Db;L>NzU6~tJNH$dDUgQs;qy? z4J)U{>f375i5L^l37g|rNBLiqwB9i6?7is|6KB8h?RV3L*;v;}Q8eDmY~`G_mX9yF zoKBt{KQk8oxx#FG@7fvD2^!mc?z(JMhaSiH&GET=*u6J+GizIUv1r%@*fiWY(O4|_ za&ObR*z=>_Pixs7Sg<%TJ8Z-1E!AV2#NO=)bHkoQm6AnZJ$Ld@uO*O=3#a1*jY^U- z;ws*i6gLc4+;e|?%+TswIirflg3uciX|9@C|766Ij8a-nISHRgaDg!ITzcVb{0=)m zw{lM3ePwSfSne9!;c^*!TsFcaL)PPxKA6Z1~6wbfnJHlFGmIuu$ZB zq;cxGBv)X=naajV&Un@mM`k8r#*YFI~*+4xJ02_8c#TduiacA?{{(a3**ocW;b>? zYym@k-?4O|y=qmyh`9OkjFvmwj+#E+yfuHi9?g3C$l^rd$5gu;!WLVEdG)%vU0p52Jk^J#Hamp~$|IR+;qD z_Wtw2efv$h%xtWWT`mpx9Z4y-0->X|e&VgbCD8b9)aM_*K}2te@5bSethUqZ(v(lf ze!}z#k|NhKZT3+V8wUB$%sSM(X14C|X^TbVbG9C3hkCjah7MbdLOBk{VnI73@iEl# z-hR&s1}FW@^XFM#+@+yE%4C34{_X7SS2LXUHi)}jRc9Z0F|hb{(^jJsrz;8E z79{w-npwL_-&XsCr@3_HqsgI`uO4gX*-Xi<9@9kUs+!U;Ma+Epeh=Y5llPok^QXO7 zmvGk4!FZ#CEI|kkgtmX(i~G#XmP|A4Ql37|PVc9**0*2d0MwGi3v;tLfd`}XBQG)& z#HA$qs0ub;`sJ4nkxiKEQ^xlqk8Wmi=G3p=VlXE=iP=j?Y77B&wPvHn)gxQ71l+e8 z`RVLwKD&2df{s$`{$1xL3tcx%<=wfh01KA*UYhMouNKI!)G<%W(8zGUcq=fnso(5S z_3}b)<%j*)^dRALEjOV^S6B?3uLr>ER&iNmQyB=Yja=k{nTn0K+sbQ~@DfapEr0rS^ zPLGw3Kh7cH&{QuLKtu0q<*clAp8LIU^cBfJBIpy9) z3!A04(RkfT+eisiGLOBJ?3kCr9m_s)9PgwIbGF9oY(sXP%lhzPTkL`d!5@|WnItue z2ug9kx2nco?F@0EfTq%V@#=hmdGT(_mzx`hZAoM_K15@`cJio;8$7R7ZVL0el_TVy zM;o-)(}tM{yP-6l80mh-kI=T`%m1;Ho4p9_s0Tu8M{wyA9s_o+8O}j#G3!c69Yt&i zZBP~6&>Ff}r!>ZqmJJ?4YfrqTZ_*dH&>XTz*Gz|jH9y;EfUYS;{A~TC%u_)c3Ckn) z^1W1)tT&>smu1Np5TBJpxhOt=cUfA3$<|}R1h*j1VTQ}MX(jfuowb-XdTG!)V-{am z)0nJHf&(LrKHlD175s=|@G9V;mQjh?GNamwbD~7fDQuO0ens%~ts%<7#`Th;7KTlh z;2Z11@``0yuKPbPh7L&jCn|Z7{QXmt8-m|`j4obJugoJYvg&SN>Fb~rVe$IqPCF_s zoN_KrzC1VNp5>XsxjKBym6K*1dSoGOd#LU$x5Lz;rE5}N9x2GLsb^d-9`|TYrNE^p zCYH1nrV9)$HeO##WNfI;+QP!9ARIT>dLr$z8M1f04ICTF1f6d^DR7isUXm-QBUrt1 z&PPGZL4t;oakmNU)w#;TYe%f4qfC7MR6fRNdi8UjQK77v$BM^Xjbn7Ul-_((q~*~5 zg;ngsn?DS1&=Dw_6;W?ec+kYwy?2q%L!u~+ za5wfL5s8O{1@(yS^fML@EjC&uRUe7ff5wNyIxK{u;NrV#kEU6#F&t4nD6?5IDNl%vhj{_>uJx}JPG6W~;1qec ze|nw!rQn*z*cMC5*@lnfQc793jWG&5opzm1VVQy6A!MVr~htX&A4xVqi zc`z?JC-9uQ|0-UBaG;bX$H~~q#O_@Xd(ioyw6l)obN7BbUA$xW#=ID7GR^r_7~4D} zOLZ1!4xNzkYs&4bsfhab6h!Ju*lwjM{;mhWuoOWxr{@XR0zAu%AAJ+=T@^ZFWf)(pR(e) z9CQ!qlIf4P@WLR%c$96@5H9iA3f`P- zFN&5=O`BG}muHCH*|k!_3=8NhHEeDjkjq}$k0IOHM`?HU#lz|wDrvMME!GrAOqePk z!^1W7%xtd9v2^-0(&#SNTV~=oHq9)Le$LR~)mG~ljxV_5HSTdzy5B#xgwQq3_*?xq zGUf4vZk#<^*F?|r?q)Id<>+Le8h1k5QPN>$W7c-wf{RrPl@?p%X-d@YqwI@>*71GX zqtW!{lDnR-GS582!xo71TdXkiAf8IMU}E9LbnX20>m8Nqb;qbBpW%?vi3(1?KT9%F zkRTrHe##`WLUE1pn5YYDk|%`pb7W0?VltQpW~cY@8LzVBY@GdkDgVF;hJl_Fm#$YZ zi^!AFYknaqJ$Jh5D8hZ$p^`xx?$w@Kw1BZ3Jlj#&WW2gWw9?F zGlMtd#j4w9)#tT@4)t#2r%Wy?I^*d=n|aB5TCsrq3QmLIAm+=L1&!up>51-6sF^q6 z1K|^5mNz;!L|3cvh4084W5!;tFbfzdJ=r51v|5~dSH;7H*VifeycV}Ntv^oYMDmo= zu|G9Z@p*qO_3@%&b>+-0-X;IoYu1|Ga-k!(zrCm_;7l__Y}ln8XVUxYaKnsQ&Ajtb zG=btN+i9zGi{I?yJZLa6?2NCii}&v5QilnaPW zw3Il(O=EcUJj>9O-JDDd$9X(|ZF{p|BjufE!-)XpsI9E5cLt7jTqXCm;*DT+5^pNa zOVh`T+%=~9jCwRUZ^UuMv4MQCXLxtrmWuJ5Ppm!gVN$Zd2RftewOS&PCO55TiRgdd2>ZOfG<{G*uHy`%9oSUl*C zA+1QGfN#F$fH6b#x9s(M&k*4H{MZNQ5-ttS+}HevPbC}fA7ysCc`wW*59A=+?6Nevl%?o-t^>=pXca6^q-(u4JjY!_o1K(%HSuyrlCbo2Vt_$Q z!0q$9$|iEI6xcLt)$aKZL^tgj8)$p}iPxj*e|$DdjrPetvQ9^hr-RrzV246UC$l$tjQ?$pQYD=;eTu~@k@6$rrMGvipzKkZaea=W-7A@( zGq#?G_EUEG5kidi>%13xojSvt^n&Z{^l%oBbc?sq8Z+~Z6_^h%JgzWcB3qU2X&D`p z*fX|K6v1~9*|eDpn(}WX1|J>oGFBj(bw$&XkTmZ|Yq9$aiyHXS#;}gwQ2l=2fAc*dR8h>Ja08 z^{w0n?!Jx_8r|>KePnd?z6CktbhmzxF6O`2CQW;Qz?ne_$&7||Tg1y~t+Mvd;u@pc z|CM@hd}EXICh2plPA%R&ZQ@16yt8}u8-aUvSj5NWd(?|>p7na_#o@Xt=HaY488c-E zzl3!kGl$Xgd)%d2XS6fk^t=r38jqvuEKx~P1-^|T;6Dj}p!J?-#;UaEcN4karx_Gq zQ!24PZ8${3;&FhE6Q9vc7fa&>CyFFBFR|a8TY1Xyh?RtQvt&Y^)G+XQ<%ZmvtK4)h zO`B!qE?(v8aeQfXhXHu*%X;MkVH^3gCT1W&*l}uv<%BH9Iks%DX$wi65NAg?!zau zi-cWvY;<_vP++u`uU>qWh(yf?wQ9lgN6&}H(Jf<%3asJePmg={dVq{ppe)>@64+Q! zyfTSJka zuIWJO4d37;{DHGaY`E#^NK?95W_q6PmI|J7{-EZ@qDEnk+@V`D49$7$RVsXA#oAUi zZ7Q%DBsRgQSYW2y)SI^orv*Lt(Bxi9R4#C-ZJ1bhAm*U!2sYmSV;=9&g#`@mu(Ij+ zhZF;5jsSsUa%O|$xH+!I?>FU9plKPR0n^rjmGk)qGbS}&&sPe&sCUd`&Q#sv^2@V1 z2vs!inYp~mhdFmj2DhID7w$StZsZoh5Y~EQ6=3pUXO@geCwjwrk`7 literal 0 HcmV?d00001 diff --git a/updater/packages.config b/updater/packages.config new file mode 100644 index 0000000..ea29129 --- /dev/null +++ b/updater/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/updater/updater.csproj b/updater/updater.csproj new file mode 100644 index 0000000..3cd409a --- /dev/null +++ b/updater/updater.csproj @@ -0,0 +1,118 @@ + + + + + Debug + AnyCPU + {73AC658D-CD49-4731-8491-A7BDBC811559} + WinExe + updater + updater + v4.6.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + av802-h1xg6-001.ico + + + LocalIntranet + + + false + + + Properties\app.manifest + + + + False + D:\libs\CSharp_AntdUI\net46\AntdUI.dll + + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + \ No newline at end of file