| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- 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();
- UriBuilder httpUb = new UriBuilder(hTTP_Address);
- if (httpUb.Scheme.ToUpper() != "HTTP") httpUb.Scheme = "HTTP";
- hTTP_Address = httpUb.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();
- UriBuilder ftpUb = new UriBuilder(fTP_Address);
- if (ftpUb.Scheme.ToUpper() != "FTP") ftpUb.Scheme = "Ftp";
- fTP_Address = ftpUb.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 Finished = new ArrayList();
- ArrayList arrayList3 = new ArrayList();
- arrayList3.Add(value);
- DownManager.DownLoad(arrayList3, hTTP_Address, fTP_Address, null, null, 1, out Finished);
- }
- 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))
- {
- if ((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 = CreateFileDataTable();
- if (LocalSet.Tables.Contains("file"))
- {
- foreach (DataRow row2 in LocalSet.Tables["file"].Rows)
- {
- row2["filename"] = row2["filename"].ToString().ToUpper();
- }
- LocalSet.Tables["file"].AcceptChanges();
- dataTable2 = LocalSet.Tables["file"];
- }
- else
- {
- LocalSet.Tables.Add(dataTable2);
- }
- foreach (string key2 in hashtable.Keys)
- {
- int result2 = 0;
- int.TryParse(hashtable[key2].ToString(), out result2);
- string text2 = Path.Combine(Application.StartupPath, key2).ToUpper();
- string text3 = Path.GetFullPath(text2).ToUpper();
- string text4 = Path.GetFileName(text2).ToUpper();
- if (result2 > 0 && !File.Exists(text2))
- {
- arrayList.Add(key2);
- }
- else if (result2 <= 0)
- {
- if (File.Exists(text2))
- {
- File.Move(text2, text2 + "." + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
- }
- }
- else
- {
- DataRow[] array = new DataRow[0];
- if (dataTable2.Columns.Contains("filename"))
- {
- array = dataTable2.Select("filename='" + key2 + "'");
- }
- if (array != null && array.Length > 0)
- {
- int num = 0;
- for (int i = 0; i < array.Length; i++)
- {
- int result = 0;
- int.TryParse(array[0]["var"].ToString(), out result);
- if (i == 0 || result > num)
- {
- 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]).ToUpper();
- foreach (string item in arrayList)
- {
- arrayList4.Add(str + item);
- }
- arrayList2 = Updater(arrayList4, hTTP_Address, fTP_Address);
- DataTable dataTable4 = CreateFileDataTable();
- Hashtable hashtable2 = new Hashtable();
- if (LocalSet.Tables.Contains("file"))
- {
- foreach (DataRow row3 in LocalSet.Tables["file"].Rows)
- {
- string text6 = row3["filename"].ToString().ToUpper();
- int result3 = 0;
- int.TryParse(row3["var"].ToString(), out result3);
- if (!hashtable2.ContainsKey(text6))
- {
- if (File.Exists(Path.Combine(Application.StartupPath, text6).ToUpper()))
- {
- hashtable2.Add(text6, result3);
- }
- }
- else if ((int)hashtable2[text6] > result3)
- {
- hashtable2[text6] = result3;
- }
- }
- }
- foreach (string item2 in arrayList2)
- {
- string text8 = item2.ToUpper();
- int num2 = (int)hashtable[text8];
- if (!hashtable2.ContainsKey(text8))
- {
- if (File.Exists(Path.Combine(Application.StartupPath, text8)))
- {
- hashtable2.Add(text8, num2);
- }
- }
- else
- {
- hashtable2[text8] = num2;
- }
- }
- foreach (string key4 in hashtable2.Keys)
- {
- DataRow dataRow2 = dataTable4.NewRow();
- dataRow2["filename"] = key4.ToUpper();
- dataRow2["var"] = hashtable2[key4.ToUpper()].ToString();
- dataTable4.Rows.Add(dataRow2);
- }
- dataTable4.AcceptChanges();
- if (LocalSet.Tables.Contains("file"))
- {
- LocalSet.Tables.Remove("file");
- }
- LocalSet.Tables.Add(dataTable4);
- LocalSet.AcceptChanges();
- File.Delete(Application.StartupPath + "\\myfilelist.xml");
- 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 DataTable CreateFileDataTable()
- {
- DataTable dataTable = new DataTable("file");
- dataTable.Columns.AddRange(new DataColumn[2]
- {
- new DataColumn("filename", typeof(string)),
- new DataColumn("var", typeof(string))
- });
- dataTable.AcceptChanges();
- return dataTable;
- }
- 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, 1, 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)
- {
- try
- {
- 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 { }
- }
- }
- catch (InvalidOperationException ex)
- {
- Debug.Print(ex.Message);
- }
- catch (Exception ex2)
- {
- throw ex2;
- }
- }
- }
- }
|