|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!
[解决办法]
风过无痕