|M| 我照别人的自己写了一个应用程序更新的程序 大家看看哪里不足
这里是主程序Load时判断是否要更新
#region 程序更新
string URL=@ "E:\Win\Update\bin\Debug\update.xml "; //下载更新配置文件的XML地址
//读取XML
XmlDocument doc_Update =new XmlDocument();
doc_Update.Load(URL);
XmlElement root=doc_Update.DocumentElement;
XmlNode node=root.SelectSingleNode( "version ");
//判断里面的节点的版本号是否和当前相同
if(Application.ProductVersion!=node.InnerText)
{
//判断更新文件是否存在
if(System.IO.File.Exists( "update.xml "))
{
//存在删除
System.IO.File.Delete( "update.xml ");
}
//下载更新配置文件
System.Net.WebClient client=new System.Net.WebClient();
client.DownloadFile(URL, "update.xml ");
//启动更新程序
System.Diagnostics.Process.Start( "Update.exe ");
//退出程序
Application.Exit();
return;
}
#endregion
------------------------------
以下是更新程序
private void Form1_Load(object sender, System.EventArgs e)
{
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();
foreach(System.Diagnostics.Process p in ps)
{
if(p.ProcessName.ToLower()== "customerapplication ")
{
p.Kill();
break;
}
}
XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + @ "\update.xml ");
XmlElement root = doc.DocumentElement;
XmlNode updateNode = root.SelectSingleNode( "filelist ");
string path = updateNode.Attributes[ "sourcepath "].Value;
int count = int.Parse(updateNode.Attributes[ "count "].Value);
for(int i=0;i <count;i++)
{
XmlNode itemNode = updateNode.ChildNodes[i];
string fileName = itemNode.Attributes[ "name "].Value;
FileInfo fi = new FileInfo(fileName);
fi.Delete();
//File.Delete(Application.StartupPath + @ "\ " + fileName);
this.label1.Text = "正在更新: " + fileName + " ( " + itemNode.Attributes[ "size "].Value + ") ... ";
System.Net.WebClient client=new System.Net.WebClient();
client.DownloadFile(itemNode.SelectSingleNode( "value ").InnerText,fileName);
}
label1.Text = "更新完成 ";
File.Delete(Application.StartupPath + @ "\update.xml ");
label1.Text = "正在重新启动应用程序... ";
System.Diagnostics.Process.Start( "PrintModule.exe ");
Close();
Application.Exit();
}
其他的没有什么
我自己感觉不足的是这里用
client.DownloadFile(itemNode.SelectSingleNode( "value ").InnerText,fileName);
有没有更好的办法
谢谢
------解决方案--------------------XmlDocument可以直接读取网络上的xml文件
如:
XmlDocument doc = new XmlDocument();
doc.load( "http://localhost/update.xml ");
------解决方案--------------------行啊~
越来越厉害啊
------解决方案--------------------1 最好将更新的各个文件打包zip,下载后解压,而不是一个一个的读文件。
2 最好考虑下程序版本的问题。
xml的节点 verson,zipfilename,currentdate,commet
------解决方案--