首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

|M| 小弟我照别人的自己写了一个应用程序更新的程序 大家看看哪里不足

2012-01-07 
|M| 我照别人的自己写了一个应用程序更新的程序 大家看看哪里不足这里是主程序Load时判断是否要更新#regio

|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

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


还真是越来越厉害了..
[解决办法]
不错
[解决办法]
能用就行,我一贯的作风.
[解决办法]

[解决办法]
这个用到了企业库吧
click-once

[解决办法]
不错,牛
[解决办法]
client.DownloadFile(itemNode.SelectSingleNode( "value ").InnerText,fileName);======没有什么不好.用webclient下载文件这样还不会有防火啬的限制
[解决办法]
Net/C#: 实现支持断点续传多线程下载的
http://blog.csdn.net/shixin1198/archive/2007/04/29/1591997.aspx

------------------------
个人blog(http://blog.csdn.net/shixin1198)欢迎访问
[解决办法]
帮顶

------------------------
个人blog(http://blog.csdn.net/shixin1198)欢迎访问
[解决办法]
up先。
[解决办法]
可以 参考 Reflector 的升级 过程

检查到新版本后(一般是服务器端更新一个ini文件由客户端读取判断) 有更新
主程序将tmp.exe(更新程序)下载到 你的 系统临时文件夹
然后主程序关闭 并启动tmp.exe(名字可能随机) 下载最新的程序 完成后 重启新的程序 自身 关闭

这样可以避免 当前程序正在使用而着成更新失败
[解决办法]
MARK!
[解决办法]
风过无痕

热点排行