//這是一個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; } } //調用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); } }
這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。