private void FormLoad() { this.btnFinish.Visible = false; string localXmlFile = string.Concat(Application.StartupPath, "\\UpdateList.xml"); string serverXmlFile = string.Empty; try { _UpdaterXmlFiles = new XmlFiles(localXmlFile); } catch (Exception e) { _tracing.Error(e, "the config xml is reading failed."); this.Close(); return; } //获取更新服务器地址 _UpdateUri = _UpdaterXmlFiles.GetNodeValue("//Url"); AppUpdater appupdater = AppUpdater.GetInstance(); appupdater.UpdaterUrl = _UpdateUri + "/UpdateList.xml"; //与服务器连接获取配置文件 try { _TempUpatePath = Environment.GetEnvironmentVariable("Temp") + "\\_" + _UpdaterXmlFiles.FindNode("//Application").Attributes["applicationId"].Value + "_y_x_m_\\"; appupdater.DownAutoUpdateFile(_TempUpatePath); } catch (Exception e) { _tracing.Error(e, "Connect to server failed"); Utils.ShowMessageBox(Messages.ConnectServerFailed, Messages.TitleNotification); this.Close(); return; } //获取文件列表 serverXmlFile = _TempUpatePath + "\\UpdateList.xml"; if (!File.Exists(serverXmlFile)) { return; } Hashtable htUpdateFile = new Hashtable(); availableUpdate = appupdater.CheckForUpdate(serverXmlFile, localXmlFile, out htUpdateFile); if (availableUpdate > 0) { for (int i = 0; i < htUpdateFile.Count; i++) { string[] fileArray = (string[])htUpdateFile[i]; //lvUpdateList.Items.Add(new ListViewItem(fileArray)); lvUpdateList.Items.Add(new ListViewItem(fileArray)); } } }
private void DownLoadFiles() { //this.Cursor = Cursors.WaitCursor; SetCursor(Cursors.WaitCursor); _MainExe = _UpdaterXmlFiles.GetNodeValue("//EntryPoint"); Process[] allProcess = Process.GetProcesses(); List <Process> pros = Process.GetProcesses().Where(p => p.ProcessName.Split(new char[] { '.' })[0].ToLower() + ".exe" == this._MainExe.ToLower()).ToList(); if (pros != null && pros.Count > 0) { pros.ForEach(p => { p.Threads.Cast <ProcessThread>().ToList().ForEach(v => { v.Dispose(); }); p.Kill(); isRun = true; }); } WebClient wcClient = new WebClient(); for (int i = 0; i < this.lvUpdateList.Items.Count; i++) { string UpdateFile = GetListViewText(i); string updateFileUrl = _UpdateUri + GetListViewText(i); long fileLength = 0; try { WebRequest webReq = WebRequest.Create(updateFileUrl); WebResponse webRes = webReq.GetResponse(); fileLength = webRes.ContentLength; Stream srm = webRes.GetResponseStream(); SetStatusText("Downloading,Please wait a moment..."); SetProgressBarInitValue(0); SetProgressBarValue((int)fileLength, true); StreamReader srmReader = new StreamReader(srm); byte[] bufferbyte = new byte[fileLength]; int allByte = (int)bufferbyte.Length; int startByte = 0; while (fileLength > 0) { Application.DoEvents(); int downByte = srm.Read(bufferbyte, startByte, allByte); if (downByte == 0) { break; } ; startByte += downByte; allByte -= downByte; SetProgressBarValue(downByte, false); //this.progressDownload.Value += downByte; float part = (float)startByte / 1024; float total = (float)bufferbyte.Length / 1024; //int percent = Convert.ToInt32((part / total) * 100); int percent = Convert.ToInt32((part / total)); //this.lvUpdateList.Items[i].SubItems[2].Text = percent.ToString() + "%"; //SetListViewText(i,percent.ToString()+"%"); SetListViewText(i, string.Format("{0:P}", percent)); } string tempPath = _TempUpatePath + UpdateFile; CreateDirtory(tempPath); FileStream fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write); fs.Write(bufferbyte, 0, bufferbyte.Length); srm.Close(); srmReader.Close(); fs.Close(); } catch (WebException ex) { Utils.ShowMessageBox(Messages.DownLoadFailed + ex.Message.ToString(), Messages.TitleError); _tracing.Error(ex, "Download failed"); } } SetStatusText("Download completed."); InvalidateControl(); SetCursor(Cursors.Default); }
/// <summary> /// 检查更新文件 /// </summary> /// <param name="serverXmlFile"></param> /// <param name="localXmlFile"></param> /// <param name="updateFileList"></param> /// <returns></returns> public int CheckForUpdate() { string localXmlFile = Application.StartupPath + "\\UpdateList.xml"; if (!File.Exists(localXmlFile)) { return(-1); } XmlFiles updaterXmlFiles = new XmlFiles(localXmlFile); string tempUpdatePath = Environment.GetEnvironmentVariable("Temp") + "\\" + "_" + updaterXmlFiles.FindNode("//Application").Attributes["applicationId"].Value + "_" + "y" + "_" + "x" + "_" + "m" + "_" + "\\"; this.UpdaterUrl = updaterXmlFiles.GetNodeValue("//Url") + "/UpdateList.xml"; this.DownAutoUpdateFile(tempUpdatePath); string serverXmlFile = tempUpdatePath + "\\UpdateList.xml"; if (!File.Exists(serverXmlFile)) { return(-1); } XmlFiles serverXmlFiles = new XmlFiles(serverXmlFile); XmlFiles localXmlFiles = new XmlFiles(localXmlFile); XmlNodeList newNodeList = serverXmlFiles.GetNodeList("AutoUpdater/Files"); XmlNodeList oldNodeList = localXmlFiles.GetNodeList("AutoUpdater/Files"); int k = 0; for (int i = 0; i < newNodeList.Count; i++) { string[] fileList = new string[3]; string newFileName = newNodeList.Item(i).Attributes["Name"].Value.Trim(); string newVer = newNodeList.Item(i).Attributes["Ver"].Value.Trim(); List <string> oldFileAl = new List <string>(); for (int j = 0; j < oldNodeList.Count; j++) { string oldFileName = oldNodeList.Item(j).Attributes["Name"].Value.Trim(); string oldVer = oldNodeList.Item(j).Attributes["Ver"].Value.Trim(); oldFileAl.Add(oldFileName); oldFileAl.Add(oldVer); } int pos = oldFileAl.IndexOf(newFileName); if (pos == -1) { fileList[0] = newFileName; fileList[1] = newVer; k++; } else if (pos > -1 && newVer.CompareTo(oldFileAl[pos + 1].ToString()) > 0) { fileList[0] = newFileName; fileList[1] = newVer; k++; } } return(k); }