├── 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 | 
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 |
--------------------------------------------------------------------------------