├── README.md ├── readme ├── logo.png └── 说明.txt ├── 在线更新.sln ├── 在线更新.suo └── 在线更新 ├── AppUpdater.cs ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── Program.cs ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── XmlFiles.cs ├── app.config ├── bin └── Debug │ ├── UpdateList.xml │ ├── 在线更新.vshost.exe │ ├── 在线更新.vshost.exe.config │ └── 在线更新.vshost.exe.manifest ├── downloadsfolder.ico ├── obj └── x86 │ └── Debug │ ├── DesignTimeResolveAssemblyReferences.cache │ ├── DesignTimeResolveAssemblyReferencesInput.cache │ └── TempPE │ └── Properties.Resources.Designer.cs.dll └── 在线更新.csproj /README.md: -------------------------------------------------------------------------------- 1 | # 在线更新程序 2 | ### 开发语言:C# 3 | ### 开发工具:Microsoft Visual Studio 2010 4 | ## 软件简述: 5 | 在线更新程序是一款简单的程序自动更新或升级的软件,通过它可以方便地进行软件自动更新或应用程序升级。 6 | ## 使用说明: 7 | 1. 本地更新程序所在目录的UpdateList.xml代码如下: 8 | ```xml 9 | 10 | 11 | Application autoUpdate 12 | 13 | 服务器更新链接,例如 http://zy13.net/ 14 | 2020-10-5 15 | 16 | 17 | 当前主程序名称,例如 php漏洞扫描器.exe 18 | 19 | 20 | 21 | 22 | 23 | ``` 24 | 1. 服务器更新链接的UpdateList.xml代码如下: 25 | ```xml 26 | 27 | 28 | Application autoUpdate 29 | 30 | 服务器更新链接,例如 http://zy13.net/ 31 | 2020-11-5 32 | 33 | 34 | 当前主程序名称,例如 php漏洞扫描器.exe 35 | 36 | 37 | 38 | 39 | 40 | ``` 41 | ## 软件截图: 42 | ![logo.png](readme/logo.png) 43 | -------------------------------------------------------------------------------- /readme/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/readme/logo.png -------------------------------------------------------------------------------- /readme/说明.txt: -------------------------------------------------------------------------------- 1 | 这个目录用于保存README.md的图片 2 | -------------------------------------------------------------------------------- /在线更新.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "在线更新", "在线更新\在线更新.csproj", "{A9D4A435-03E2-4B90-BBE8-A8C3489BAE48}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|x86 = Debug|x86 9 | Release|x86 = Release|x86 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {A9D4A435-03E2-4B90-BBE8-A8C3489BAE48}.Debug|x86.ActiveCfg = Debug|x86 13 | {A9D4A435-03E2-4B90-BBE8-A8C3489BAE48}.Debug|x86.Build.0 = Debug|x86 14 | {A9D4A435-03E2-4B90-BBE8-A8C3489BAE48}.Release|x86.ActiveCfg = Release|x86 15 | {A9D4A435-03E2-4B90-BBE8-A8C3489BAE48}.Release|x86.Build.0 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /在线更新.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/在线更新.suo -------------------------------------------------------------------------------- /在线更新/AppUpdater.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Web; 3 | using System.IO; 4 | using System.Net; 5 | using System.Xml; 6 | using System.Collections; 7 | using System.Windows.Forms; 8 | using System.ComponentModel; 9 | 10 | namespace 在线更新 11 | { 12 | public class AppUpdater : IDisposable 13 | { 14 | #region 成员与字段属性 15 | private string _updaterUrl; 16 | private bool disposed = false; 17 | private IntPtr handle; 18 | private Component component = new Component(); 19 | [System.Runtime.InteropServices.DllImport("Kernel32")] 20 | private extern static Boolean CloseHandle(IntPtr handle); 21 | 22 | 23 | public string UpdaterUrl 24 | { 25 | set { _updaterUrl = value; } 26 | get { return this._updaterUrl; } 27 | } 28 | #endregion 29 | 30 | /// 31 | /// AppUpdater构造函数 32 | /// 33 | public AppUpdater() 34 | { 35 | } 36 | public void Dispose() 37 | { 38 | Dispose(true); 39 | GC.SuppressFinalize(this); 40 | } 41 | private void Dispose(bool disposing) 42 | { 43 | if (!this.disposed) 44 | { 45 | if (disposing) 46 | { 47 | 48 | component.Dispose(); 49 | } 50 | CloseHandle(handle); 51 | handle = IntPtr.Zero; 52 | } 53 | disposed = true; 54 | } 55 | 56 | ~AppUpdater() 57 | { 58 | Dispose(false); 59 | } 60 | 61 | 62 | /// 63 | /// 检查更新文件 64 | /// 65 | /// 66 | /// 67 | /// 68 | /// 69 | public int CheckForUpdate(string serverXmlFile, string localXmlFile, out Hashtable updateFileList) 70 | { 71 | updateFileList = new Hashtable(); 72 | if (!File.Exists(localXmlFile) || !File.Exists(serverXmlFile)) 73 | { 74 | return -1; 75 | } 76 | 77 | XmlFiles serverXmlFiles = new XmlFiles(serverXmlFile); 78 | XmlFiles localXmlFiles = new XmlFiles(localXmlFile); 79 | 80 | XmlNodeList newNodeList = serverXmlFiles.GetNodeList("AutoUpdater/Files"); 81 | XmlNodeList oldNodeList = localXmlFiles.GetNodeList("AutoUpdater/Files"); 82 | 83 | int k = 0; 84 | for (int i = 0; i < newNodeList.Count; i++) 85 | { 86 | string[] fileList = new string[3]; 87 | 88 | string newFileName = newNodeList.Item(i).Attributes["Name"].Value.Trim(); 89 | string newVer = newNodeList.Item(i).Attributes["Ver"].Value.Trim(); 90 | 91 | ArrayList oldFileAl = new ArrayList(); 92 | for (int j = 0; j < oldNodeList.Count; j++) 93 | { 94 | string oldFileName = oldNodeList.Item(j).Attributes["Name"].Value.Trim(); 95 | string oldVer = oldNodeList.Item(j).Attributes["Ver"].Value.Trim(); 96 | 97 | oldFileAl.Add(oldFileName); 98 | oldFileAl.Add(oldVer); 99 | 100 | } 101 | int pos = oldFileAl.IndexOf(newFileName); 102 | if (pos == -1) 103 | { 104 | fileList[0] = newFileName; 105 | fileList[1] = newVer; 106 | updateFileList.Add(k, fileList); 107 | k++; 108 | } 109 | else if (pos > -1 && newVer.CompareTo(oldFileAl[pos + 1].ToString()) > 0) 110 | { 111 | fileList[0] = newFileName; 112 | fileList[1] = newVer; 113 | updateFileList.Add(k, fileList); 114 | k++; 115 | } 116 | 117 | } 118 | return k; 119 | } 120 | 121 | /// 122 | /// 检查更新文件 123 | /// 124 | /// 125 | /// 126 | /// 127 | /// 128 | public int CheckForUpdate() 129 | { 130 | string localXmlFile = Application.StartupPath + "\\UpdateList.xml"; 131 | if (!File.Exists(localXmlFile)) 132 | { 133 | return -1; 134 | } 135 | 136 | XmlFiles updaterXmlFiles = new XmlFiles(localXmlFile); 137 | 138 | 139 | //string tempUpdatePath = Environment.GetEnvironmentVariable("Temp") + "\\" + "_" + updaterXmlFiles.FindNode("//Application").Attributes["applicationId"].Value + "_" + "y" + "_" + "x" + "_" + "m" + "_" + "\\"; 140 | string tempUpdatePath = Application.StartupPath + "//Updater/"; 141 | this.UpdaterUrl = updaterXmlFiles.GetNodeValue("//Url") + "/UpdateList.xml"; 142 | this.DownAutoUpdateFile(tempUpdatePath); 143 | 144 | string serverXmlFile = tempUpdatePath + "\\UpdateList.xml"; 145 | if (!File.Exists(serverXmlFile)) 146 | { 147 | return -1; 148 | } 149 | 150 | XmlFiles serverXmlFiles = new XmlFiles(serverXmlFile); 151 | XmlFiles localXmlFiles = new XmlFiles(localXmlFile); 152 | 153 | XmlNodeList newNodeList = serverXmlFiles.GetNodeList("AutoUpdater/Files"); 154 | XmlNodeList oldNodeList = localXmlFiles.GetNodeList("AutoUpdater/Files"); 155 | 156 | int k = 0; 157 | for (int i = 0; i < newNodeList.Count; i++) 158 | { 159 | string[] fileList = new string[3]; 160 | 161 | string newFileName = newNodeList.Item(i).Attributes["Name"].Value.Trim(); 162 | string newVer = newNodeList.Item(i).Attributes["Ver"].Value.Trim(); 163 | 164 | ArrayList oldFileAl = new ArrayList(); 165 | for (int j = 0; j < oldNodeList.Count; j++) 166 | { 167 | string oldFileName = oldNodeList.Item(j).Attributes["Name"].Value.Trim(); 168 | string oldVer = oldNodeList.Item(j).Attributes["Ver"].Value.Trim(); 169 | 170 | oldFileAl.Add(oldFileName); 171 | oldFileAl.Add(oldVer); 172 | 173 | } 174 | int pos = oldFileAl.IndexOf(newFileName); 175 | if (pos == -1) 176 | { 177 | fileList[0] = newFileName; 178 | fileList[1] = newVer; 179 | k++; 180 | } 181 | else if (pos > -1 && newVer.CompareTo(oldFileAl[pos + 1].ToString()) > 0) 182 | { 183 | fileList[0] = newFileName; 184 | fileList[1] = newVer; 185 | k++; 186 | } 187 | 188 | } 189 | return k; 190 | } 191 | /// 192 | /// 返回下载更新文件的临时目录 193 | /// 194 | /// 195 | public void DownAutoUpdateFile(string downpath) 196 | { 197 | if (!System.IO.Directory.Exists(downpath)) 198 | System.IO.Directory.CreateDirectory(downpath); 199 | string serverXmlFile = downpath + @"/UpdateList.xml"; 200 | 201 | try 202 | { 203 | WebRequest req = WebRequest.Create(this.UpdaterUrl); 204 | WebResponse res = req.GetResponse(); 205 | if (res.ContentLength > 0) 206 | { 207 | try 208 | { 209 | WebClient wClient = new WebClient(); 210 | wClient.DownloadFile(this.UpdaterUrl, serverXmlFile); 211 | } 212 | catch 213 | { 214 | return; 215 | } 216 | } 217 | } 218 | catch 219 | { 220 | return; 221 | } 222 | } 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /在线更新/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace 在线更新 2 | { 3 | partial class Form1 4 | { 5 | #region Windows 窗体设计器生成的代码 6 | /// 7 | /// 设计器支持所需的方法 - 不要 8 | /// 使用代码编辑器修改此方法的内容。 9 | /// 10 | private void InitializeComponent() 11 | { 12 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 13 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 14 | this.panel1 = new System.Windows.Forms.Panel(); 15 | this.labTitle = new System.Windows.Forms.Label(); 16 | this.groupBox2 = new System.Windows.Forms.GroupBox(); 17 | this.lvUpdateList = new System.Windows.Forms.ListView(); 18 | this.chFileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 19 | this.chVersion = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 20 | this.chProgress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 21 | this.pbDownFile = new System.Windows.Forms.ProgressBar(); 22 | this.lbState = new System.Windows.Forms.Label(); 23 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 24 | this.btnNext = new System.Windows.Forms.Button(); 25 | this.btnCancel = new System.Windows.Forms.Button(); 26 | this.panel2 = new System.Windows.Forms.Panel(); 27 | this.label4 = new System.Windows.Forms.Label(); 28 | this.linkLabel1 = new System.Windows.Forms.LinkLabel(); 29 | this.label3 = new System.Windows.Forms.Label(); 30 | this.label2 = new System.Windows.Forms.Label(); 31 | this.label5 = new System.Windows.Forms.Label(); 32 | this.groupBox3 = new System.Windows.Forms.GroupBox(); 33 | this.groupBox4 = new System.Windows.Forms.GroupBox(); 34 | this.btnFinish = new System.Windows.Forms.Button(); 35 | this.pictureBox2 = new System.Windows.Forms.PictureBox(); 36 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 37 | this.panel1.SuspendLayout(); 38 | this.panel2.SuspendLayout(); 39 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); 40 | this.SuspendLayout(); 41 | // 42 | // pictureBox1 43 | // 44 | this.pictureBox1.Location = new System.Drawing.Point(8, 8); 45 | this.pictureBox1.Name = "pictureBox1"; 46 | this.pictureBox1.Size = new System.Drawing.Size(96, 240); 47 | this.pictureBox1.TabIndex = 1; 48 | this.pictureBox1.TabStop = false; 49 | // 50 | // panel1 51 | // 52 | this.panel1.Controls.Add(this.labTitle); 53 | this.panel1.Controls.Add(this.groupBox2); 54 | this.panel1.Controls.Add(this.lvUpdateList); 55 | this.panel1.Controls.Add(this.pbDownFile); 56 | this.panel1.Controls.Add(this.lbState); 57 | this.panel1.Controls.Add(this.groupBox1); 58 | this.panel1.Location = new System.Drawing.Point(120, 8); 59 | this.panel1.Name = "panel1"; 60 | this.panel1.Size = new System.Drawing.Size(280, 240); 61 | this.panel1.TabIndex = 2; 62 | // 63 | // labTitle 64 | // 65 | this.labTitle.AutoSize = true; 66 | this.labTitle.ForeColor = System.Drawing.Color.Brown; 67 | this.labTitle.Location = new System.Drawing.Point(7, 16); 68 | this.labTitle.Name = "labTitle"; 69 | this.labTitle.Size = new System.Drawing.Size(191, 12); 70 | this.labTitle.TabIndex = 9; 71 | this.labTitle.Text = "正在检查更新文件,请耐心等待..."; 72 | // 73 | // groupBox2 74 | // 75 | this.groupBox2.Dock = System.Windows.Forms.DockStyle.Bottom; 76 | this.groupBox2.Location = new System.Drawing.Point(0, 238); 77 | this.groupBox2.Name = "groupBox2"; 78 | this.groupBox2.Size = new System.Drawing.Size(280, 2); 79 | this.groupBox2.TabIndex = 7; 80 | this.groupBox2.TabStop = false; 81 | this.groupBox2.Text = "groupBox2"; 82 | // 83 | // lvUpdateList 84 | // 85 | this.lvUpdateList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 86 | this.chFileName, 87 | this.chVersion, 88 | this.chProgress}); 89 | this.lvUpdateList.Location = new System.Drawing.Point(3, 48); 90 | this.lvUpdateList.Name = "lvUpdateList"; 91 | this.lvUpdateList.Size = new System.Drawing.Size(272, 120); 92 | this.lvUpdateList.TabIndex = 6; 93 | this.lvUpdateList.UseCompatibleStateImageBehavior = false; 94 | this.lvUpdateList.View = System.Windows.Forms.View.Details; 95 | // 96 | // chFileName 97 | // 98 | this.chFileName.Text = "文件名"; 99 | this.chFileName.Width = 123; 100 | // 101 | // chVersion 102 | // 103 | this.chVersion.Text = "版本号"; 104 | this.chVersion.Width = 98; 105 | // 106 | // chProgress 107 | // 108 | this.chProgress.Text = "进度"; 109 | this.chProgress.Width = 47; 110 | // 111 | // pbDownFile 112 | // 113 | this.pbDownFile.Location = new System.Drawing.Point(3, 200); 114 | this.pbDownFile.Name = "pbDownFile"; 115 | this.pbDownFile.Size = new System.Drawing.Size(274, 17); 116 | this.pbDownFile.TabIndex = 5; 117 | // 118 | // lbState 119 | // 120 | this.lbState.Location = new System.Drawing.Point(3, 176); 121 | this.lbState.Name = "lbState"; 122 | this.lbState.Size = new System.Drawing.Size(240, 16); 123 | this.lbState.TabIndex = 4; 124 | this.lbState.Text = "点击“下一步”开始更新文件"; 125 | // 126 | // groupBox1 127 | // 128 | this.groupBox1.Location = new System.Drawing.Point(0, 32); 129 | this.groupBox1.Name = "groupBox1"; 130 | this.groupBox1.Size = new System.Drawing.Size(280, 8); 131 | this.groupBox1.TabIndex = 1; 132 | this.groupBox1.TabStop = false; 133 | // 134 | // btnNext 135 | // 136 | this.btnNext.Location = new System.Drawing.Point(224, 264); 137 | this.btnNext.Name = "btnNext"; 138 | this.btnNext.Size = new System.Drawing.Size(80, 24); 139 | this.btnNext.TabIndex = 3; 140 | this.btnNext.Text = "下一步(&N)>"; 141 | this.btnNext.Click += new System.EventHandler(this.btnNext_Click); 142 | // 143 | // btnCancel 144 | // 145 | this.btnCancel.Location = new System.Drawing.Point(312, 264); 146 | this.btnCancel.Name = "btnCancel"; 147 | this.btnCancel.Size = new System.Drawing.Size(80, 24); 148 | this.btnCancel.TabIndex = 4; 149 | this.btnCancel.Text = "取消(&C)"; 150 | this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); 151 | // 152 | // panel2 153 | // 154 | this.panel2.Controls.Add(this.label4); 155 | this.panel2.Controls.Add(this.linkLabel1); 156 | this.panel2.Controls.Add(this.label3); 157 | this.panel2.Controls.Add(this.label2); 158 | this.panel2.Controls.Add(this.label5); 159 | this.panel2.Controls.Add(this.groupBox3); 160 | this.panel2.Controls.Add(this.groupBox4); 161 | this.panel2.Location = new System.Drawing.Point(8, 264); 162 | this.panel2.Name = "panel2"; 163 | this.panel2.Size = new System.Drawing.Size(112, 24); 164 | this.panel2.TabIndex = 5; 165 | // 166 | // label4 167 | // 168 | this.label4.Location = new System.Drawing.Point(144, 184); 169 | this.label4.Name = "label4"; 170 | this.label4.Size = new System.Drawing.Size(100, 16); 171 | this.label4.TabIndex = 13; 172 | this.label4.Text = "资源驿站"; 173 | // 174 | // linkLabel1 175 | // 176 | this.linkLabel1.Location = new System.Drawing.Point(136, 208); 177 | this.linkLabel1.Name = "linkLabel1"; 178 | this.linkLabel1.Size = new System.Drawing.Size(128, 16); 179 | this.linkLabel1.TabIndex = 12; 180 | this.linkLabel1.TabStop = true; 181 | this.linkLabel1.Text = "http://www.zy13.net"; 182 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); 183 | // 184 | // label3 185 | // 186 | this.label3.Location = new System.Drawing.Point(24, 120); 187 | this.label3.Name = "label3"; 188 | this.label3.Size = new System.Drawing.Size(184, 16); 189 | this.label3.TabIndex = 11; 190 | this.label3.Text = "欢迎以后继续关注我们的产品。"; 191 | // 192 | // label2 193 | // 194 | this.label2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 195 | this.label2.Location = new System.Drawing.Point(24, 64); 196 | this.label2.Name = "label2"; 197 | this.label2.Size = new System.Drawing.Size(232, 48); 198 | this.label2.TabIndex = 10; 199 | this.label2.Text = " 程序更新完成,如果程序更新期间被关闭,点击\"完成\"自动更新程序会自动重新启动系统。"; 200 | // 201 | // label5 202 | // 203 | this.label5.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 204 | this.label5.Location = new System.Drawing.Point(16, 8); 205 | this.label5.Name = "label5"; 206 | this.label5.Size = new System.Drawing.Size(136, 24); 207 | this.label5.TabIndex = 9; 208 | this.label5.Text = "感谢使用在线升级"; 209 | // 210 | // groupBox3 211 | // 212 | this.groupBox3.Dock = System.Windows.Forms.DockStyle.Bottom; 213 | this.groupBox3.Location = new System.Drawing.Point(0, 22); 214 | this.groupBox3.Name = "groupBox3"; 215 | this.groupBox3.Size = new System.Drawing.Size(112, 2); 216 | this.groupBox3.TabIndex = 7; 217 | this.groupBox3.TabStop = false; 218 | this.groupBox3.Text = "groupBox2"; 219 | // 220 | // groupBox4 221 | // 222 | this.groupBox4.Location = new System.Drawing.Point(0, 32); 223 | this.groupBox4.Name = "groupBox4"; 224 | this.groupBox4.Size = new System.Drawing.Size(280, 8); 225 | this.groupBox4.TabIndex = 1; 226 | this.groupBox4.TabStop = false; 227 | // 228 | // btnFinish 229 | // 230 | this.btnFinish.Location = new System.Drawing.Point(136, 264); 231 | this.btnFinish.Name = "btnFinish"; 232 | this.btnFinish.Size = new System.Drawing.Size(80, 24); 233 | this.btnFinish.TabIndex = 3; 234 | this.btnFinish.Text = "完成(&F)"; 235 | this.btnFinish.Click += new System.EventHandler(this.btnFinish_Click); 236 | // 237 | // pictureBox2 238 | // 239 | this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); 240 | this.pictureBox2.Location = new System.Drawing.Point(8, 8); 241 | this.pictureBox2.Name = "pictureBox2"; 242 | this.pictureBox2.Size = new System.Drawing.Size(96, 240); 243 | this.pictureBox2.TabIndex = 6; 244 | this.pictureBox2.TabStop = false; 245 | // 246 | // Form1 247 | // 248 | this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); 249 | this.ClientSize = new System.Drawing.Size(424, 301); 250 | this.ControlBox = false; 251 | this.Controls.Add(this.pictureBox2); 252 | this.Controls.Add(this.panel2); 253 | this.Controls.Add(this.btnCancel); 254 | this.Controls.Add(this.btnNext); 255 | this.Controls.Add(this.panel1); 256 | this.Controls.Add(this.pictureBox1); 257 | this.Controls.Add(this.btnFinish); 258 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 259 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 260 | this.MaximizeBox = false; 261 | this.MinimizeBox = false; 262 | this.Name = "Form1"; 263 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 264 | this.Text = "自动更新"; 265 | this.TopMost = true; 266 | this.Load += new System.EventHandler(this.FrmUpdate_Load); 267 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 268 | this.panel1.ResumeLayout(false); 269 | this.panel1.PerformLayout(); 270 | this.panel2.ResumeLayout(false); 271 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); 272 | this.ResumeLayout(false); 273 | 274 | } 275 | #endregion 276 | } 277 | } 278 | 279 | -------------------------------------------------------------------------------- /在线更新/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Collections; 4 | using System.ComponentModel; 5 | using System.Windows.Forms; 6 | using System.Xml; 7 | using System.Net; 8 | using System.IO; 9 | using System.Threading; 10 | using System.Diagnostics; 11 | using System.Text; 12 | 13 | namespace 在线更新 14 | { 15 | /// 16 | /// 自动更新模块 17 | /// 18 | public partial class Form1 : System.Windows.Forms.Form 19 | { 20 | private System.Windows.Forms.PictureBox pictureBox1; 21 | private System.Windows.Forms.Panel panel1; 22 | private System.Windows.Forms.GroupBox groupBox1; 23 | private System.Windows.Forms.ColumnHeader chFileName; 24 | private System.Windows.Forms.ColumnHeader chVersion; 25 | private System.Windows.Forms.ColumnHeader chProgress; 26 | private System.Windows.Forms.GroupBox groupBox2; 27 | private System.Windows.Forms.ListView lvUpdateList; 28 | private System.Windows.Forms.Label labTitle; 29 | private System.Windows.Forms.Button btnNext; 30 | private System.Windows.Forms.Button btnCancel; 31 | private System.Windows.Forms.Label lbState; 32 | private System.Windows.Forms.ProgressBar pbDownFile; 33 | private System.Windows.Forms.Panel panel2; 34 | private System.Windows.Forms.GroupBox groupBox3; 35 | private System.Windows.Forms.GroupBox groupBox4; 36 | private System.Windows.Forms.Button btnFinish; 37 | private Label label4; 38 | private LinkLabel linkLabel1; 39 | private Label label3; 40 | private Label label2; 41 | private Label label5; 42 | private bool checkStatus = false; 43 | 44 | public Form1() 45 | { 46 | //允许子线程操作UI 47 | System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 48 | InitializeComponent(); 49 | new Thread(new ThreadStart(this.PerformTask)) { IsBackground = true }.Start(); 50 | } 51 | 52 | //服务器更新地址 53 | private string updateUrl = string.Empty; 54 | private string tempUpdatePath = string.Empty; 55 | XmlFiles updaterXmlFiles = null; 56 | private int availableUpdate = 0; 57 | string mainAppExe = ""; 58 | 59 | private void PerformTask() 60 | { 61 | //设置线程池最大线程数量 62 | ThreadPool.SetMaxThreads(1, 1); 63 | ThreadPool.QueueUserWorkItem(delegate { Run(); }); 64 | } 65 | private void Run() 66 | { 67 | string localXmlFile = Application.StartupPath + "\\UpdateList.xml"; 68 | string serverXmlFile = string.Empty; 69 | 70 | 71 | try 72 | { 73 | //从本地读取更新配置文件信息 74 | updaterXmlFiles = new XmlFiles(localXmlFile); 75 | } 76 | catch 77 | { 78 | MessageBox.Show("配置文件出错!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); 79 | this.Close(); 80 | return; 81 | } 82 | //获取服务器地址 83 | updateUrl = updaterXmlFiles.GetNodeValue("//Url"); 84 | 85 | AppUpdater appUpdater = new AppUpdater(); 86 | appUpdater.UpdaterUrl = updateUrl + "/UpdateList.xml"; 87 | 88 | //与服务器连接,下载更新配置文件 89 | try 90 | { 91 | //tempUpdatePath = Environment.GetEnvironmentVariable("Temp") + "\\" + "_" + updaterXmlFiles.FindNode("//Application").Attributes["applicationId"].Value + "_" + "y" + "_" + "x" + "_" + "m" + "_" + "\\"; 92 | tempUpdatePath = Application.StartupPath + "//Updater/"; 93 | appUpdater.DownAutoUpdateFile(tempUpdatePath); 94 | } 95 | catch 96 | { 97 | MessageBox.Show("与服务器连接失败,操作超时!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 98 | this.Close(); 99 | return; 100 | 101 | } 102 | 103 | //获取更新文件列表 104 | Hashtable htUpdateFile = new Hashtable(); 105 | 106 | serverXmlFile = tempUpdatePath + "\\UpdateList.xml"; 107 | if (!File.Exists(serverXmlFile)) 108 | { 109 | return; 110 | } 111 | try 112 | { 113 | availableUpdate = appUpdater.CheckForUpdate(serverXmlFile, localXmlFile, out htUpdateFile); 114 | if (availableUpdate > 0) 115 | { 116 | this.labTitle.Text = "以下为更新文件列表:"; 117 | for (int i = 0; i < htUpdateFile.Count; i++) 118 | { 119 | string[] fileArray = (string[])htUpdateFile[i]; 120 | lvUpdateList.Items.Add(new ListViewItem(fileArray)); 121 | } 122 | } 123 | else 124 | { 125 | this.labTitle.Text = "当前已是最新版本,没有可用的更新!"; 126 | } 127 | checkStatus = true; 128 | } 129 | catch (Exception) 130 | { 131 | checkStatus = false; 132 | this.labTitle.Text = "检查更新失败"; 133 | } 134 | 135 | } 136 | #region Load事件 137 | private void FrmUpdate_Load(object sender, System.EventArgs e) 138 | { 139 | panel2.Visible = false; 140 | btnFinish.Visible = false; 141 | } 142 | #endregion 143 | 144 | private void btnCancel_Click(object sender, System.EventArgs e) 145 | { 146 | this.Close(); 147 | } 148 | 149 | private void btnNext_Click(object sender, System.EventArgs e) 150 | { 151 | if (availableUpdate > 0) 152 | { 153 | Thread threadDown = new Thread(new ThreadStart(DownUpdateFile)); 154 | threadDown.IsBackground = true; 155 | threadDown.Start(); 156 | } 157 | else 158 | { 159 | if (checkStatus) 160 | { 161 | MessageBox.Show("没有可用的更新!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 162 | } 163 | else 164 | { 165 | MessageBox.Show("正在检查更新,请稍候...", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 166 | } 167 | return; 168 | } 169 | 170 | } 171 | private void DownUpdateFile() 172 | { 173 | //关掉主进程 174 | mainAppExe = updaterXmlFiles.GetNodeValue("//EntryPoint"); 175 | Process[] allProcess = Process.GetProcesses(); 176 | foreach (Process p in allProcess) 177 | { 178 | if (p.ProcessName.ToLower() + ".exe" == mainAppExe.ToLower()) 179 | { 180 | for (int i = 0; i < p.Threads.Count; i++) 181 | { 182 | p.Threads[i].Dispose(); 183 | p.Kill(); 184 | } 185 | } 186 | } 187 | WebClient wcClient = new WebClient(); 188 | for (int i = 0; i < this.lvUpdateList.Items.Count; i++) 189 | { 190 | string UpdateFile = lvUpdateList.Items[i].Text.Trim(); 191 | string updateFileUrl = updateUrl + lvUpdateList.Items[i].Text.Trim(); 192 | long fileLength = 0; 193 | 194 | WebRequest webReq = WebRequest.Create(updateFileUrl); 195 | WebResponse webRes = webReq.GetResponse(); 196 | fileLength = webRes.ContentLength; 197 | 198 | lbState.Text = "正在下载更新文件,请稍后..."; 199 | pbDownFile.Value = 0; 200 | pbDownFile.Maximum = (int)fileLength; 201 | 202 | try 203 | { 204 | Stream srm = webRes.GetResponseStream(); 205 | StreamReader srmReader = new StreamReader(srm); 206 | byte[] bufferbyte = new byte[fileLength]; 207 | int allByte = (int)bufferbyte.Length; 208 | int startByte = 0; 209 | while (fileLength > 0) 210 | { 211 | Application.DoEvents(); 212 | int downByte = srm.Read(bufferbyte, startByte, allByte); 213 | if (downByte == 0) { break; }; 214 | startByte += downByte; 215 | allByte -= downByte; 216 | pbDownFile.Value += downByte; 217 | 218 | float part = (float)startByte / 1024; 219 | float total = (float)bufferbyte.Length / 1024; 220 | int percent = Convert.ToInt32((part / total) * 100); 221 | 222 | this.lvUpdateList.Items[i].SubItems[2].Text = percent.ToString() + "%"; 223 | 224 | } 225 | 226 | string tempPath = tempUpdatePath + UpdateFile; 227 | CreateDirtory(tempPath); 228 | FileStream fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write); 229 | fs.Write(bufferbyte, 0, bufferbyte.Length); 230 | srm.Close(); 231 | srmReader.Close(); 232 | fs.Close(); 233 | 234 | 235 | } 236 | catch (WebException ex) 237 | { 238 | MessageBox.Show("更新文件下载失败!" + ex.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); 239 | } 240 | } 241 | InvalidateControl(); 242 | } 243 | //创建目录 244 | private void CreateDirtory(string path) 245 | { 246 | if (!File.Exists(path)) 247 | { 248 | string[] dirArray = path.Split('\\'); 249 | string temp = string.Empty; 250 | for (int i = 0; i < dirArray.Length - 1; i++) 251 | { 252 | temp += dirArray[i].Trim() + "\\"; 253 | if (!Directory.Exists(temp)) 254 | Directory.CreateDirectory(temp); 255 | } 256 | } 257 | } 258 | 259 | private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) 260 | { 261 | //打开资源驿站(www.zy13.net) 262 | System.Diagnostics.Process.Start(linkLabel1.Text); 263 | } 264 | //点击完成复制更新文件到应用程序目录 265 | private void btnFinish_Click(object sender, System.EventArgs e) 266 | { 267 | 268 | this.Dispose(); 269 | try 270 | { 271 | CopyDirectory(tempUpdatePath, Directory.GetCurrentDirectory()); 272 | System.IO.Directory.Delete(tempUpdatePath, true); 273 | } 274 | catch (Exception) 275 | { 276 | } 277 | if (mainAppExe != string.Empty) 278 | { 279 | //启动程序 280 | System.Diagnostics.Process.Start(Environment.CurrentDirectory + mainAppExe); 281 | } 282 | else 283 | { 284 | MessageBox.Show("更新成功,请重新打开程序!", "提示"); 285 | } 286 | this.Close(); 287 | 288 | } 289 | /// 290 | /// 把一个文件夹下所有文件复制到另一个文件夹下 291 | /// 292 | /// 293 | /// 294 | public static void CopyDirectory(string srcPath, string destPath) 295 | { 296 | //获取目录下(不包含子目录)的文件和子目录 297 | DirectoryInfo dir = new DirectoryInfo(srcPath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); 298 | foreach (FileSystemInfo i in fileinfo) 299 | { 300 | //判断是否文件夹 301 | if (i is DirectoryInfo) 302 | { 303 | if (!Directory.Exists(destPath + "\\" + i.Name)) 304 | { 305 | //目标目录下不存在此文件夹即创建子文件夹 306 | Directory.CreateDirectory(destPath + "\\" + i.Name); 307 | } 308 | //递归调用复制子文件夹 309 | CopyDirectory(i.FullName, destPath + "\\" + i.Name); 310 | } 311 | else 312 | { 313 | //不是文件夹即复制文件,true表示可以覆盖同名文件 314 | File.Copy(i.FullName, destPath + "\\" + i.Name, true); 315 | } 316 | } 317 | } 318 | 319 | //重新绘制窗体部分控件属性 320 | private void InvalidateControl() 321 | { 322 | panel2.Location = panel1.Location; 323 | panel2.Size = panel1.Size; 324 | panel1.Visible = false; 325 | panel2.Visible = true; 326 | 327 | btnNext.Visible = false; 328 | btnCancel.Visible = false; 329 | btnFinish.Location = btnCancel.Location; 330 | btnFinish.Visible = true; 331 | } 332 | //判断主应用程序是否正在运行 333 | private bool IsMainAppRun() 334 | { 335 | string mainAppExe = updaterXmlFiles.GetNodeValue("//EntryPoint"); 336 | bool isRun = false; 337 | Process[] allProcess = Process.GetProcesses(); 338 | foreach (Process p in allProcess) 339 | { 340 | if (p.ProcessName.ToLower() + ".exe" == mainAppExe.ToLower()) 341 | { 342 | isRun = true; 343 | } 344 | } 345 | return isRun; 346 | } 347 | 348 | private PictureBox pictureBox2; 349 | } 350 | } 351 | -------------------------------------------------------------------------------- /在线更新/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows.Forms; 4 | 5 | namespace 在线更新 6 | { 7 | static class Program 8 | { 9 | /// 10 | /// 应用程序的主入口点。 11 | /// 12 | [STAThread] 13 | static void Main() 14 | { 15 | Application.EnableVisualStyles(); 16 | Application.SetCompatibleTextRenderingDefault(false); 17 | Application.Run(new Form1()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /在线更新/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的常规信息通过以下 6 | // 特性集控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("在线更新")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Microsoft")] 12 | [assembly: AssemblyProduct("在线更新")] 13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 使此程序集中的类型 18 | // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, 19 | // 则将该类型上的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("84dd8ce9-3c21-4937-9f5d-8733bca9c823")] 24 | 25 | // 程序集的版本信息由下面四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 内部版本号 30 | // 修订号 31 | // 32 | // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, 33 | // 方法是按如下所示使用“*”: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /在线更新/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace 在线更新.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// 一个强类型的资源类,用于查找本地化的字符串等。 17 | /// 18 | // 此类是由 StronglyTypedResourceBuilder 19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | // (以 /str 作为命令选项),或重新生成 VS 项目。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// 返回此类使用的缓存的 ResourceManager 实例。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("在线更新.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 使用此强类型资源类,为所有资源查找 51 | /// 重写当前线程的 CurrentUICulture 属性。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /在线更新/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /在线更新/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace 在线更新.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /在线更新/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /在线更新/XmlFiles.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Xml; 4 | 5 | namespace 在线更新 6 | { 7 | public class XmlFiles : XmlDocument 8 | { 9 | #region 字段与属性 10 | private string _xmlFileName; 11 | public string XmlFileName 12 | { 13 | set { _xmlFileName = value; } 14 | get { return _xmlFileName; } 15 | } 16 | #endregion 17 | 18 | public XmlFiles(string xmlFile) 19 | { 20 | XmlFileName = xmlFile; 21 | 22 | this.Load(xmlFile); 23 | } 24 | /// 25 | /// 给定一个节点的xPath表达式并返回一个节点 26 | /// 27 | /// 28 | /// 29 | public XmlNode FindNode(string xPath) 30 | { 31 | XmlNode xmlNode = this.SelectSingleNode(xPath); 32 | return xmlNode; 33 | } 34 | /// 35 | /// 给定一个节点的xPath表达式返回其值 36 | /// 37 | /// 38 | /// 39 | public string GetNodeValue(string xPath) 40 | { 41 | XmlNode xmlNode = this.SelectSingleNode(xPath);//5~1-a-s-p-x 42 | return xmlNode.InnerText; 43 | } 44 | /// 45 | /// 给定一个节点的表达式返回此节点下的孩子节点列表 46 | /// 47 | /// 48 | /// 49 | public XmlNodeList GetNodeList(string xPath) 50 | { 51 | XmlNodeList nodeList = this.SelectSingleNode(xPath).ChildNodes; 52 | return nodeList; 53 | 54 | } 55 | 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /在线更新/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /在线更新/bin/Debug/UpdateList.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/在线更新/bin/Debug/UpdateList.xml -------------------------------------------------------------------------------- /在线更新/bin/Debug/在线更新.vshost.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/在线更新/bin/Debug/在线更新.vshost.exe -------------------------------------------------------------------------------- /在线更新/bin/Debug/在线更新.vshost.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /在线更新/bin/Debug/在线更新.vshost.exe.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /在线更新/downloadsfolder.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/在线更新/downloadsfolder.ico -------------------------------------------------------------------------------- /在线更新/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/在线更新/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache -------------------------------------------------------------------------------- /在线更新/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/在线更新/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache -------------------------------------------------------------------------------- /在线更新/obj/x86/Debug/TempPE/Properties.Resources.Designer.cs.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/respost/OnlineUpdate/72ca626fb1b0a53983e982d2a2bd403d6bcf1958/在线更新/obj/x86/Debug/TempPE/Properties.Resources.Designer.cs.dll -------------------------------------------------------------------------------- /在线更新/在线更新.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | x86 6 | 8.0.30703 7 | 2.0 8 | {A9D4A435-03E2-4B90-BBE8-A8C3489BAE48} 9 | WinExe 10 | Properties 11 | 在线更新 12 | 在线更新 13 | v2.0 14 | 15 | 16 | 512 17 | 18 | 19 | x86 20 | true 21 | full 22 | false 23 | bin\Debug\ 24 | DEBUG;TRACE 25 | prompt 26 | 4 27 | 28 | 29 | x86 30 | pdbonly 31 | true 32 | bin\Release\ 33 | TRACE 34 | prompt 35 | 4 36 | 37 | 38 | downloadsfolder.ico 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | Form 51 | 52 | 53 | Form1.cs 54 | 55 | 56 | 57 | 58 | 59 | Form1.cs 60 | 61 | 62 | ResXFileCodeGenerator 63 | Resources.Designer.cs 64 | Designer 65 | 66 | 67 | True 68 | Resources.resx 69 | True 70 | 71 | 72 | 73 | SettingsSingleFileGenerator 74 | Settings.Designer.cs 75 | 76 | 77 | True 78 | Settings.settings 79 | True 80 | 81 | 82 | 83 | 84 | 85 | 86 | 93 | --------------------------------------------------------------------------------