using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Configuration; using System.Collections; using System.Diagnostics; using System.Net; using System.IO; namespace Mes.AutoUpdate { public partial class AutoUpdate : Form { private DataSet ServerSet; private DataSet LocalSet; public AutoUpdate() { InitializeComponent(); } private void AutoUpdater_Load(object sender, EventArgs e) { Text += string.Format(" [{0}]", Application.ProductVersion.ToString()); base.Visible = false; string hTTP_Address; try { hTTP_Address = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["downloadUrl"].Value.ToString(); } catch { hTTP_Address = "http://172.16.0.108:9998/"; } string fTP_Address; try { fTP_Address = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["downloadFtpUrl"].Value.ToString(); } catch { fTP_Address = "ftp://172.16.0.108:21/"; } string value; try { value = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["downloadUrlfile"].Value.ToString(); } catch { value = "filelist.xml"; } ArrayList arrayList = new ArrayList(); ArrayList arrayList2 = new ArrayList(); WebRequest.DefaultWebProxy = null; try { try { ArrayList arrayList3 = new ArrayList(); arrayList3.Add(value); ArrayList files = arrayList3; DownManager.DownLoad(files, hTTP_Address, fTP_Address, null, null, out arrayList3); } catch (Exception ex) { throw new Exception("下载服务器更新列表失败!\n" + ex.Message); } ServerSet = new DataSet(); ServerSet.ReadXml(Application.StartupPath + "\\filelist.xml"); DataTable dataTable = ServerSet.Tables["file"]; Hashtable hashtable = new Hashtable(); LocalSet = new DataSet(); foreach (DataRow row in dataTable.Rows) { string key = row["filename"].ToString().ToUpper(); int result = 0; int.TryParse(row["var"].ToString(), out result); if (hashtable.ContainsKey(key) && (int)hashtable[key] < result) { hashtable[key] = result; } else { hashtable.Add(key, result); } } if (File.Exists(Application.StartupPath + "\\myfilelist.xml")) { LocalSet.ReadXml(Application.StartupPath + "\\myfilelist.xml"); DataTable dataTable2 = new DataTable("file"); if (LocalSet.Tables.Contains("file")) { dataTable2 = LocalSet.Tables["file"]; } foreach (string key2 in hashtable.Keys) { DataRow[] array = new DataRow[0]; if (dataTable2.Columns.Contains("filename")) { array = dataTable2.Select("filename='" + key2 + "'"); } if (array != null && array.Length > 0) { int num = 0; int num2 = 0; for (int i = 0; i < array.Length; i++) { int result = Convert.ToInt32(array[0]["var"]); if (i == 0 || result > num) { num2 = i; num = result; } } if ((int)hashtable[key2] != num && !arrayList.Contains(key2)) { arrayList.Add(key2); } } else if (!arrayList.Contains(key2)) { arrayList.Add(key2); } } } else { foreach (string key3 in hashtable.Keys) { if (!arrayList.Contains(key3)) { arrayList.Add(key3); } } } foreach (DataTable table in ServerSet.Tables) { if (!(table.TableName.ToUpper() == "FILE") && !LocalSet.Tables.Contains(table.TableName)) { LocalSet.Tables.Add(table.Copy()); } } if (arrayList.Count > 0) { StopProcess("Core.Mes.ClientManager"); base.Visible = true; ArrayList arrayList4 = new ArrayList(); string str = Convert.ToString(ServerSet.Tables["path"].Rows[0][0]); foreach (string item in arrayList) { arrayList4.Add(str + item); } arrayList2 = Updater(arrayList4, hTTP_Address, fTP_Address); DataTable dataTable4 = new DataTable("file"); dataTable4.Columns.AddRange(new DataColumn[2] { new DataColumn("filename", typeof(string)), new DataColumn("var", typeof(string)) }); Hashtable hashtable2 = new Hashtable(); if (LocalSet.Tables.Contains("file")) { foreach (DataRow row2 in LocalSet.Tables["file"].Rows) { string text = row2["filename"].ToString(); int result2 = 0; int.TryParse(row2["var"].ToString(), out result2); if (!hashtable2.ContainsKey(text)) { if (File.Exists(Path.Combine(Application.StartupPath, text))) { hashtable2.Add(text, result2); } } else if ((int)hashtable2[text] > result2) { hashtable2[text] = result2; } } } foreach (string item2 in arrayList2) { int result2 = (int)hashtable[item2]; if (!hashtable2.ContainsKey(item2)) { if (File.Exists(Path.Combine(Application.StartupPath, item2))) { hashtable2.Add(item2, result2); } } else { hashtable2[item2] = result2; } } foreach (string key4 in hashtable2.Keys) { DataRow dataRow2 = dataTable4.NewRow(); dataRow2["filename"] = key4; dataRow2["var"] = hashtable2[key4].ToString(); dataTable4.Rows.Add(dataRow2); } dataTable4.AcceptChanges(); if (LocalSet.Tables.Contains("file")) { LocalSet.Tables.Remove("file"); } LocalSet.AcceptChanges(); LocalSet.Tables.Add(dataTable4); LocalSet.WriteXml(Application.StartupPath + "\\myfilelist.xml"); } Process.Start(Application.StartupPath + "\\Core.Mes.ClientManager.exe"); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { Close(); Application.Exit(); } } private ArrayList Updater(ArrayList files, string HTTP_Address, string FTP_Address) { ArrayList Finished = null; lock (files) { try { DownManager.DownLoad(files, HTTP_Address, FTP_Address, Main_Progress, Show_Progress, out Finished); } catch (Exception ex) { MessageBox.Show(ex.Message, "更新出错!", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } return Finished; } private void Main_Progress(int _A, int _B) { Application.DoEvents(); progressBar1.Maximum = _B; progressBar1.Value = _A; } private void Show_Progress(string main_progress, string sub_progress) { Application.DoEvents(); lblfile.Text = string.Format("{0} [{1}]", main_progress, sub_progress); } private void StopProcess(string processName) { try { Process[] processesByName = Process.GetProcessesByName(processName); Process[] array = processesByName; foreach (Process process in array) { if (processName.Length >= 4 && processName.Substring(processName.Length - 4, 4).ToUpper() != ".EXE") { processName += ".EXE"; } string path = Path.Combine(Application.StartupPath, processName); if (Path.GetFullPath(process.MainModule.FileName).ToUpper() == Path.GetFullPath(path).ToUpper()) { if (MessageBox.Show("检测到客户端正在运行,是否强制关闭?", "警告", MessageBoxButtons.OKCancel) == DialogResult.OK) { process.Kill(); } else { Close(); Application.Exit(); } } } } catch (InvalidOperationException ex) { Debug.Print(ex.Message); } catch (Exception ex2) { throw ex2; } } } }