C#下实现在线升级

//这是一个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);
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户端版本和服务器版本上传软件

FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户端工具,而FileZilla Server则是一个小巧并且可靠的支持F…

一个Ext2+SWFUpload做的图片上传对话框

一个Ext2SWFUpload做的图片上传对话框的例程我们先看看对话框的布局: 布局就是在一个窗口里内嵌一个表格控件,窗口的底部工具条带一个进度条,表格的顶部工具条带几个操作按钮和一个下来选择框,底部工具条作为一个信息显示区域显示…

单交换机VLAN 配置和结果验证(51cto-o8)

1. 实验线路连接图使用Cisco Packet Tracer5.3 构建拓扑结构图 2. 实验内容(1) 按图配置各台计算机IP 地址。(2) 参阅教材中内容,完成单交换机上的VLAN 配置,配置要求如图 所示,使用show vlan 指令查看VLAN的配置情况,并使用Ping …

UML:类图复习-鸡生蛋,蛋生鸡

这是前一阵《高级软件工程》课堂上,老师随堂出的一道讨论题,随手贴在这里: ps: 今天是520,正好聊一些OoXx,关于爱的扯淡话题:) 题目:“鸡生蛋,蛋孵鸡”,世间万…

[转] 硬盘工具DiskMan使用图解

① 图解DM硬盘分区的基本使用(图) 对于一个新硬盘来说,首先必须进行的工作就是进行分区,只有这样才能正常使用,同时分区也是为方便我们进行资料的管理。DOS中的Fdisk是一个很小巧的工具,但是在使用上有些麻烦,特别是…

Flex布局教程篇

Flex布局是什么? Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。 任何一个容器只要添加”display:flex”都可以指定为Flex布局。行内元素添加”display:inline-flex”便可以指定为使用Flex布局。 注意:设置…

在DrawingVisual上绘制圆形的进度条,类似于IOS系统风格。

1.说明:在WPF中,文件下载时需要显示下载进度,由于系统自带的条型进度条比较占用空间,改用圆形的进度条,需要在DrawingVisual上呈现。 运行的效果如图: private Point GetPointOnCir(Point CenterPoint, double r, doub…

Discuz论坛架设从零起步之四

前期工作: 按Discuz论坛架设从零起步之一([url]http://waringid.blog.51cto.com/65148/50906[/url]) Discuz论坛架设从零起步之二([url]http://waringid.blog.51cto.com/65148/50940[/url]) Discuz论坛架设从零起步之三…

CSS Grid布局(1)

1.网格容器:通过display属性设置属性值为grid或inline-grid可以创建一个网格容器。网格容器中的所有子元素就会自动变成网格项目(grid item) 1.1网格项目默认放在行中,并且跨网格容器的全宽 2.显示网格:使用grid-template-columns和grid-tem…

logogogo最新变种XP.exe的分析(Win32.Logogo)

作者:清新阳光 ( [url]http://hi.baidu.com/newcenturysun[/url])日期:2007/11/17 (转载请保留此声明) 这是之前logogo.exe病毒的…

深入::first-letter的研究

:first-letter 伪元素用来向文本的第一个字母添加特殊样式 1.::first-letter伪元素生效的前提 1.首先,元素的display计算值必须是 block, inline-block, table-cell, list-item或者table-caption,其他所有display计算值都没有用,包括displa…

[转]Android Activity和Intent机制学习笔记

Activity Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(见http://www.cnblogs.com/feisky/archive/2010/01/01/1637427.html,由系统控制生命周期,程…