网站内容自动更新(本文提纲·1.摘要·2.摘要为什么不使用ClickOnce)
优采云 发布时间: 2021-11-05 17:13网站内容自动更新(本文提纲·1.摘要·2.摘要为什么不使用ClickOnce)
一. 总结
一个英文的自动更新组件文章Release a AutoUpdater tool 前两天在博客上发布了,所以在这个文章中,我们也简单介绍一下它的功能,这个组件很简单,所以大家可以下载并进行一些改进。众所周知,对于一般的软件开发来说,一开始都会有一个技术选择阶段。最大的选择是首先确定是选择Client/Server模式还是Browser/Server模式。总体来说:两者各有优缺点,在很多方面都无法相互替代。例如,B/S 在互联网应用和维护工作量方面比 C/S 强得多;但在运行速度、数据安全、人机交互方面,B/S远不如C/S强大。所以综上所述,C/S的所有优点都是B/S的缺点,反之亦然。由于今天讨论的是组件的自动更新,所以我们将详细讨论这方面,因为C/S模式在运行速度、数据安全、人机交互等方*敏*感*词*有如此多的优势,尤其是在随着技术的不断发展的今天客户端技术。,如何解决客户端部署和自动升级的问题是一个非常重要的问题。
二. 本文大纲
· 1.总结
· 2.本文大纲
· 3.为什么不使用ClickOnce
· 4.简介
· 5.如何在项目中使用
· 6.特效
· 7.维护和下载
· 8.总结
三. 为什么不使用 ClickOnce
在前面的总结中,我们简单介绍了自动更新功能的重要性。本节我们来谈谈为什么不使用微软提供的自动更新组件ClickOnce。大家都知道 ClickOnce 为我们提供了很*敏*感*词*: 简单 换句话说,ClickOnce 应用程序是任何使用 ClickOnce 技术发布的 Windows 窗体或控制台应用程序。可以通过三种不同的方式发布 ClickOnce 应用程序:从网页、网络文件共享或媒体(例如 CD-ROM)。ClickOnce 应用程序可以安装在最终用户的计算机上并在本地运行(即使计算机处于脱机状态),也可以仅在联机模式下运行,而无需在最终用户的计算机上永久安装任何内容。ClickOnce 应用程序可以自行更新;这些应用程序可以在更新版本可用时检查它们并自动替换所有更新的文件。开发者可以指定更新行为;网络管理员还可以控制更新策略,例如将更新标记为强制更新。最终用户或管理员还可以回滚更新以将应用程序恢复到早期版本。
从上面可以看出,ClickOnce无疑是微软Client/Server部署的最佳方案,但正是因为它的功能特别强大,使用起来也比较方便,所以产品包装非常严格,基本上就暴露了一些简单的操作接口,无形中屏蔽了一些自定义操作,例如:
1、用户不能自行指定安装路径。
2. 自动更新过程不可自定义操作。
3. 无法为自动更新的用户界面定制的设计。
由于这些原因,很多公司都会制作一些定制的组件来实现自动更新功能。基于此,我们还在这里实现了一个非常简单的自动更新组件。
四. 简介
其实自动更新的原理很简单。分析无非是一些简单的操作。当然,实现方法是类似的。这里我们选择一个更简单的方法:
1.启动主程序,在主程序中调用升级程序,将升级程序连接到IIS或FTP。
2.升级程序在服务器端XML配置文件中获取新版本程序的更新日期或版本号或文件大小。
3.升级程序获取原创客户端应用的最新更新日期或版本号或文件大小,然后将两者进行比较;如果新版本日期>原程序的最新日期,则提示用户是否升级;或者如果新版本的版本号>原程序的版本号,提示用户是否升级;或者如果新版本的文件大小>原程序的文件大小,提示用户是否升级。本文主要采用通用的方式,即按版本号进行比较。
4.如果用户选择升级,获取下载文件列表;
5. 在本地创建一个远程IIS或者FTP对应的临时目录,然后下载到这个临时目录文件;
6.删除旧的主程序,将临时文件夹中的文件复制到相应位置;
8. 结束升级过程,重启主程序。
按照之前的流程,我们可以简单的设计如下项目:
图1
具体班级介绍:
IAutoUpdater.cs 为外部调用提供接口
AutoUpdater.cs 该组件的主要操作类
Autoupdater.config 本地配置文件
DownloadConfirm.cs 提示是否有更新页面
DownloadProgress.cs 下载进度页面
CommonUnitity.cs 一些常用函数
更新完成后需要更新Config.cs,所以这里需要一个提供序列化的Config类
ConstFile.cs 一些常量文件
DownloadFileInfo.cs 需要下载的文件实体类
LocalFile.cs 本地文件实体类
RemoteFile.cs 远程文件实体类
UpdateFileList.cs 本地实体类集合
代码很简单,大家可以下载查看,这里不再赘述。
五. 项目中如何使用
第 1 步:将更新版本托管到服务器
如果想让客户端得到最新版本,首先我们需要开发者编译源代码并生成文件,然后拷贝到FTP或者IIS目录下,运行一个自动生成XML文件的程序,将所有文件自动生成成一个XML 文件,详见下图:
图2
第二步:配置本地Config
完成第一步流程后,这一步我们要做的就是配置本地Config来监控和下载远程IIS或FTP下需要更新的文件,如下图所示:
图 3
第三步:修改主程序
首先,在我们的主项目中引入AutoUpdater DLL,然后在主项目中添加以下代码。当然,你可以根据自己的需要写。这个DLL提供了两个外部接口,一个接口用于判断是否有更新和下载。另一个接口用于在发生更新错误时执行回滚操作。具体代码如下:
#region 检查并下载新版本程序
bool bHasError =false;
IAutoUpdater autoUpdater =new AutoUpdater();
尝试
{
autoUpdater.Update();
}
捕获(WebException exp)
{
MessageBox.Show("找不到指定的资源");
bHasError = true;
}
捕获(XmlException exp)
{
bHasError = true;
MessageBox.Show("下载升级文件出错");
}
捕获(NotSupportedException exp)
{
bHasError = true;
MessageBox.Show("升级地址配置错误");
}
捕获 (ArgumentException exp)
{
bHasError = true;
MessageBox.Show("下载升级文件出错");
}
捕获(异常 exp)
{
bHasError = true;
MessageBox.Show("升级过程中发生错误");
}
最后
{
如果(bHasError ==真)
{
尝试
{
autoUpdater.RollBack();
}
捕获(异常)
{
//将消息记录到您的文件或数据库
}
}
}
#endregion
使用起来就是这么简单,更详细的操作可以下载源码,因为简单,可以根据具体项目的需要进行修改。
六. 具体效果
当我们运行主程序(WinForm或WPF)时,如果服务器上有最新版本,会弹出如下页面提示,让用户选择是否更新。
图 4
当用户不需要更新时,可以选择跳过按钮跳过并继续主程序流程,否则进入以下页面。
图 5
在下载过程中,用户可以选择取消停止下载并返回主流程。
七. 维护下载
该组件已经托管在CodePlex上,可以在上面下载其源码,具体地址:
图 6
八. 总结
我们的文章文章简单介绍了一个简单的自动更新组件。因为比较简单,功能单一,就不花太多篇幅讨论了。有兴趣的读者可以下载源代码。以后会托管一套自己开发的MVVM框架。由于目前对Silverlight的支持不是很好,我正在继续做相关的改进,其中借鉴了一些其他优秀框架的思想,并结合了一些实际的应用场景。,所以希望大家能给我更多的建议呢!