日期:2014-05-18  浏览次数:20426 次

|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

------解决方案--