標籤:des style blog color 使用 os 檔案 io
//這是一個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); } 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:如果系統正在運行,您得停止系統,至於如何停止,也許可以使用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); } }