private void FrmUpdate_Load(object sender, System.EventArgs e) { btnFinish.Visible = false; string localXmlFile = Application.StartupPath + "\\UpdateList.xml"; string serverXmlFile = string.Empty; try { //从本地读取更新配置文件信息 updaterXmlFiles = new XmlFiles(localXmlFile); } catch { MessageBox.Show("配置文件出错!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); Close(); return; } //获取服务器地址 updateUrlOnline = updaterXmlFiles.GetNodeValue("//Url"); AppUpdater.UpdaterUrl = updateUrlOnline + "/UpdateList.xml"; //与服务器连接,下载更新配置文件 try { tempUpdatePath = Environment.GetEnvironmentVariable("Temp") + "\\" + "_" + updaterXmlFiles.FindNode("//A" + "pplication").Attributes["applicati" + "onId"].Value + "_y_x_m_\\"; AppUpdater.DownAutoUpdateFile(tempUpdatePath); } catch (Exception ExpTion) { MessageBox.Show(ExpTion.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); return; } //获取更新文件列表 Hashtable htUpdateFile = new Hashtable(); serverXmlFile = tempUpdatePath + "\\UpdateList.xml"; if (!File.Exists(serverXmlFile)) { return; } 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)); } } }
/// <summary> /// 检查更新文件 /// </summary> /// <param name="serverXmlFile"></param> /// <param name="localXmlFile"></param> /// <param name="updateFileList"></param> /// <returns></returns> public static 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" + "_" + "\\"; UpdaterUrl = updaterXmlFiles.GetNodeValue("//Url") + "/UpdateList.xml"; 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(); ArrayList oldFileAl = new ArrayList(); 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); }
private void BtnNext_Click(object sender, EventArgs e) { if (availableUpdate > 0) { Cursor = Cursors.WaitCursor; mainAppExe = updaterXmlFiles.GetNodeValue("//EntryPoint"); Process[] allProcess = Process.GetProcesses(); foreach (Process p in allProcess) { if (p.ProcessName.ToLower() + ".exe" == mainAppExe.ToLower()) { for (int i = 0; i < p.Threads.Count; i++) { p.Threads[i].Dispose(); } p.Kill(); } } //WebClient wcClient = new WebClient(); for (int i = 0; i < lvUpdateList.Items.Count; i++) { string UpdateFileName = lvUpdateList.Items[i].Text.Trim(); string UpdateFileUrl = updateUrlOnline + "/" + lvUpdateList.Items[i].Text.Trim(); //long fileLength = 0; //WebRequest webReq = WebRequest.Create(UpdateFileUrl); //WebResponse webRes = webReq.GetResponse(); //fileLength = webRes.ContentLength; //lbState.Text = "正在下载更新文件,请稍后..."; //pbDownFile.Value = 0; //pbDownFile.Maximum = (int)fileLength; try { //Stream srm = webRes.GetResponseStream(); //StreamReader srmReader = new StreamReader(srm); //byte[] bufferbyte = new byte[fileLength]; //int allByte = 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; // pbDownFile.Value += downByte; // float part = (float)startByte / 1024; // float total = (float)bufferbyte.Length / 1024; // int percent = (int)((part / total) * 100); // this.lvUpdateList.Items[i].SubItems[2].Text = percent + "%"; //} string tempPath = tempUpdatePath + UpdateFileName; //CreateDirtory(tempPath); //FileStream fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write); //fs.Write(bufferbyte, 0, bufferbyte.Length); //srm.Close(); //srmReader.Close(); //fs.Close(); WebClient Clint = new WebClient(); new Microsoft.VisualBasic.Devices.Computer().Network.DownloadFile(UpdateFileUrl, tempPath, "", "", true, 100000, true, Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException); } catch (WebException ex) { MessageBox.Show("更新文件下载失败!" + Environment.NewLine + ex.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } btnNext.Visible = false; btnCancel.Visible = false; btnFinish.Location = btnCancel.Location; btnFinish.Visible = true; Cursor = Cursors.Default; } else { MessageBox.Show("没有可用的更新!", "自动更新", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } }