//這是一個webservice
private 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;
???}
??}
//調(diào)用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);
????}
????else
?????System.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");
????}
????#endregion
???
????System.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:如果系統(tǒng)正在運行,您得停止系統(tǒng),至于如何停止,也許可以使用System.Diagnostics.Process
???????System.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);
???}
??}