2、 在WinForm应用程序启动的时候,首先访问webservice获取服务器的xml中的版本号,然后获取客户端的xml中的版本号。将两个版本号比较,若服务器中的版本号大,则提示提示可以在线更新应用程序。
- <?xml version="1.0" encoding="utf-8" ?>
- <Content>
- <Project id="程序名称" Edition="1.0"> </Project>
- </Content>
第二部分:升级程序代码如下:
- using System;
- using System.Collections.Generic;
- using System.Windows.Forms;
- using Medicine_ERP;
- using DevExpress.XtraEditors;
- using System.Xml;
- using Anshield_AutoFutures.BaseClase;
- namespace Anshield_AutoFutures
- {
- static class Program
- {
- private static void LoadMath()
- {
- //服务器上的版本号
- string NewEdition = "1.0";
- //应用程序中的版本号
- string OldEdition = "1.0";
- try
- {
- //服务器上的版本号
- NewEdition = webserverClase.getCopyRightCode();
- //获取系统中xml里面存储的版本号
- String fileName = Application.StartupPath + "\\XMLEdition.xml";
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.Load(fileName);
- XmlNode xn = xmlDoc.SelectSingleNode("Content");
- XmlNodeList xnl = xn.ChildNodes;
- foreach (XmlNode xnf in xnl)
- {
- XmlElement xe = (XmlElement)xnf;
- if (xe.GetAttribute("id") == "jigou_plz")
- {
- OldEdition = xe.GetAttribute("Edition");//动态数组
- }
- break;
- }
- double newE = double.Parse(NewEdition);
- double oldE = double.Parse(OldEdition);
- //比较两个版本号,判断应用程序是否要更新
- if (newE > oldE)
- {
- //更新程序¨
- DialogResult dr = XtraMessageBox.Show("发现新的版本是否要更新该软件", "平浪舟现货程序化交易--更新提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
- if (dr == DialogResult.OK)
- {
- //打开下载窗口
- // Application.Run(new DownUpdate());
- //启动安装程序
- System.Diagnostics.Process.Start(Application.StartupPath + @"\Upgrade_Form.exe");
- Application.Exit();
- }
- else
- {
- //若用户取消,打开初始界面
- anshield_Login login = new anshield_Login();
- if (login.ShowDialog() == DialogResult.OK)
- {
- Application.Run(new Main_AutoFutures());
- }
- }
- }
- else
- {
- //若服务器版本低于或相等客户端,打开初始界面
- anshield_Login login = new anshield_Login();
- if (login.ShowDialog() == DialogResult.OK)
- {
- Application.Run(new Main_AutoFutures());
- }
- }
- }
- catch
- {
- XtraMessageBox.Show("网络链接失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
- /// <summary>
- /// 应用程序的主入口点。
- /// </summary>
- [STAThread]
- static void Main()
- {
- //保证同时只有一个客户端在运行
- System.Threading.Mutex mutexMyapplication = new System.Threading.Mutex(false, "jigou_plz.exe");
- if (!mutexMyapplication.WaitOne(100, false))
- {
- XtraMessageBox.Show("程序" + Application.ProductName + "已经在运行!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
- else
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- //汉化
- hugengyong hu = new hugengyong();
- DevExpress.UserSkins.OfficeSkins.Register();
- DevExpress.Skins.SkinManager.EnableFormSkins();
- DevExpress.UserSkins.BonusSkins.Register();
- LoadMath();
- }
- }
- }
- }
zip压缩文件解压方法类
- //debug目录,用于存放压缩文件
- string path = Application.StartupPath;
- private void btnDown_Click(object sender, EventArgs e)
- {
- string zipFile = path + @"\jigou_plz.zip";
- //关闭原有的应用程序
- killProess();
- btnDown.Enabled = false;
- button2.Enabled = false;
- //自动下载压缩包,并且解压,最后关闭当前进程,进行安装
- try
- {
- //下载自动更新
- string downUrl = ConfigurationManager.ConnectionStrings["DownUrl"].ConnectionString.ToString().Trim();
- if (!string.IsNullOrEmpty(downUrl))
- {
- DownloadFile(downUrl, zipFile, progressBar1, label1);
- }
- else
- {
- MessageBox.Show("Config中的下载路径配置错误!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return;
- }
- }
- catch
- {
- MessageBox.Show("当前没有网络或者文件地址不正确");
- return;
- }
- //解a压1
- try
- {
- //关闭原有的应用程序
- killProess();
- //unCompressRAR(path, path, "setup.rar", true);
- BaseClase.Zip.UnZip(zipFile, path, "", true,true);
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- return;
- }
- if (MessageBox.Show("升级完成!,请重新登陆!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
- {
- FileInfo file = new FileInfo(path + @"\Anshield_AutoFutures.exe");//文件地址
- if (file.Exists)
- {
- Process.Start(path + @"\Anshield_AutoFutures.exe");
- }
- Application.Exit();
- }
- }
- /// <summary>
- /// c#.net 下载文件
- /// </summary>
- /// <param name="URL">下载文件地址</param>
- ///
- /// <param name="Filename">下载后的存放地址</param>
- /// <param name="Prog">用于显示的进度条</param>
- ///
- public void DownloadFile(string URL, string filename, System.Windows.Forms.ProgressBar prog, System.Windows.Forms.Label label1)
- {
- float percent = 0;
- try
- {
- System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
- System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
- long totalBytes = myrp.ContentLength;
- if (prog != null)
- {
- prog.Maximum = (int)totalBytes;
- }
- System.IO.Stream st = myrp.GetResponseStream();
- System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
- long totalDownloadedByte = 0;
- byte[] by = new byte[1024];
- int osize = st.Read(by, 0, (int)by.Length);
- while (osize > 0)
- {
- totalDownloadedByte = osize + totalDownloadedByte;
- System.Windows.Forms.Application.DoEvents();
- so.Write(by, 0, osize);
- if (prog != null)
- {
- prog.Value = (int)totalDownloadedByte;
- }
- osize = st.Read(by, 0, (int)by.Length);
- percent = (float)totalDownloadedByte / (float)totalBytes * 100;
- label1.Text = "下载进度" + percent.ToString() + "%";
- System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
- }
- label1.Text = "下载完成。安装中... ...";
- so.Flush();//将缓冲区内在写入到基础流中
- st.Flush();//将缓冲区内在写入到基础流中
- so.Close();
- st.Close();
- }
- catch (System.Exception)
- {
- throw;
- }
- }
- /// <summary>
- /// 关闭原有的应用程序
- /// </summary>
- private void killProess()
- {
- this.label1.Text = "正在关闭程序....";
- System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcessesByName("Anshield_AutoFutures");
- //关闭原有应用程序的所有进程
- foreach (System.Diagnostics.Process pro in proc)
- {
- pro.Kill();
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.IO;
- using System.IO.Compression;
- using ICSharpCode.SharpZipLib.Zip;
- namespace Upgrade_Form.BaseClase
- {
- class Zip
- {
- /// <summary>
- /// 解压缩一个 zip 文件。
- /// </summary>
- /// <param name="zipedFile">zip文件路径</param>
- /// <param name="strDirectory">解压路径</param>
- /// <param name="password">zip文件的密码</param>
- /// <param name="overWrite">是否覆盖已存在的文件。</param>
- /// <param name="delteFile">解压后是否删除文件</param>
- public static void UnZip(string zipedFile, string strDirectory, string password, bool overWrite,bool delteFile)
- {
- //路径不存在则创建
- if (Directory.Exists(strDirectory) == false)
- {
- Directory.CreateDirectory(strDirectory);
- }
- if (strDirectory == "")
- strDirectory = Directory.GetCurrentDirectory();
- if (!strDirectory.EndsWith("\\"))
- strDirectory = strDirectory + "\\";
- using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipedFile)))
- {
- s.Password = password;
- ZipEntry theEntry;
- while ((theEntry = s.GetNextEntry()) != null)
- {
- string directoryName = "";
- string pathToZip = "";
- pathToZip = theEntry.Name;
- if (pathToZip != "")
- directoryName = Path.GetDirectoryName(pathToZip) + "\\";
- string fileName = Path.GetFileName(pathToZip);
- Directory.CreateDirectory(strDirectory + directoryName);
- if (fileName != "")
- {
- if ((File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!File.Exists(strDirectory + directoryName + fileName)))
- {
- using (FileStream streamWriter = File.Create(strDirectory + directoryName + fileName))
- {
- int size = 2048;
- byte[] data = new byte[2048];
- while (true)
- {
- size = s.Read(data, 0, data.Length);
- if (size > 0)
- streamWriter.Write(data, 0, size);
- else
- break;
- }
- streamWriter.Close();
- }
- }
- }
- }
- s.Close();
- }
- if (delteFile == true)
- {
- File.Delete(zipedFile);
- }
- }
- }
- }
来源: http://www.phpxs.com/code/1004453/