//这是一个webserviceprivate AppUpdate.UpdateServ UpdateSvr;private void button1_Click(object sender, System.EventArgs e){ if(LinkWebServices()==true){this.label1.Text="连接服务器. PASS";if(CheckVer()==true){this.label2.Text="检查最新版本并下载.PASS"; }else{this.label2.Text="检查最新版本并下载.FAIL";}}else{this.label1.Text="连接服务器.FAIL";}}//这是用来与升级服务器建立连接private bool LinkWebServices(){try{UpdateSvr=new UpdateServ();return true;}catch{return false;}}//调用webservice用来检查是不是有最新的版本private bool CheckVer(){string path =Application.StartupPath;try{VersionCheck(path);return true;}catch(Exception ex){MessageBox.Show(ex.ToString());return false;}}private void VersionCheck(string desPath){try{查看文件和目录#region 查看文件和目录if(!desPath.EndsWith(@"\"))desPath += @"\";if(!System.IO.Directory.Exists(desPath)){System.IO.Directory.CreateDirectory(desPath);}string tempPath = desPath + @"tempDesPathCache\";if(System.IO.Directory.Exists(tempPath)){System.IO.Directory.Delete(tempPath,true);System.IO.Directory.CreateDirectory(tempPath);}elseSystem.IO.Directory.CreateDirectory(tempPath);if(!System.IO.File.Exists(desPath + "UpdateConfig.xml")){System.Xml.XmlDocument updateConfig = new System.Xml.XmlDocument();updateConfig.LoadXml(@"<root></root>");updateConfig.Save(desPath + "UpdateConfig.xml");}#endregionSystem.Xml.XmlDocument serverXmlDoc = UpdateSvr.AppUpdateVertion();System.Xml.XmlDocument localXmlDoc = new System.Xml.XmlDocument();localXmlDoc.Load(desPath + "UpdateConfig.xml");bool newVersionExist = false;bool moduleExist = false;System.Xml.XmlNode serverNode0 = serverXmlDoc.ChildNodes[0];System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes[0];foreach(System.Xml.XmlNode serverNode in serverNode0){moduleExist = false;foreach(System.Xml.XmlNode localNode in localNode0){//找到对应模块if(localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText){moduleExist = true;//版本号判断if(localNode.ChildNodes[1].InnerText.CompareTo(serverNode.ChildNodes[1].InnerText) < 0){newVersionExist = true;if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet"){DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);}else{DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);}}break;}}//没找到对应模块if(false == moduleExist){if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet"){DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);}else{DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);}}}//写入新UpdateConfig.xml升级完毕后替换if(newVersionExist){serverXmlDoc.Save(tempPath + "UpdateConfig.xml");if(DialogResult.Yes == MessageBox.Show("有新版本,是否更新?","提示",MessageBoxButtons.YesNo)){string[] dirs = System.IO.Directory.GetFiles(tempPath, "*.*");string fileName;foreach (string dir in dirs){fileName = ((dir.Split(Convert.ToChar(@"\")))[dir.Split(Convert.ToChar(@"\")).Length - 1]);if(System.IO.File.Exists(desPath + fileName)){//TODO:可以支持备份以前版本System.IO.File.Delete(desPath + fileName);}//TODO:如果系统正在运行,您得停止系统,至于如何停止,也许可以使用System.Diagnostics.ProcessSystem.IO.File.Move(dir,desPath + fileName);}MessageBox.Show("升级完毕");}else{//TODO:可以支持重新提示升级}}}catch(Exception ex){throw new Exception("升级失败,原因是:" + ex.Message,ex);}}//下载最新的文件private void DownloadFile(string source,string fileName){try{System.Net.WebClient myWebClient = new System.Net.WebClient();myWebClient.DownloadFile(source,fileName);}catch(Exception ex){throw new Exception("下载失败,原因是:" + ex.Message,ex);}}