除了在软件架构设计中需要规划好各功能项以备分别可以实现局部升级外,重要的是配置好自动升级组件。然而该自动升级组件并非直接引用即可,它需要遵守一定的规则部署才能完成自动升级。以下给出它的配置手册。
必备的文件清单:
|
文件名 |
功能描述 |
|
AppStart.exe |
类似中介代理的程序,由它来启动真正的应用程序。不直接启动主应用程序是为了防止主应用程序升级的过程中被锁死而造成升级失败。 |
|
AppStart.config |
AppStart.exe的配置文件,它指定要启动的应用程序所在目录,以及要启动应用程序的名称 |
|
appupdater.dll |
最重要的部件,自动升级的主要组件 |
|
system.Resources.dll |
资源文件 |
|
mscorlib.Resources.dll |
核心资源文件 |
|
UpdateVersion.xml |
服务器端版本升级配置文件 |
自动升级配置:
注意事项:
1. 因为自动升级组件appupdater代码里写死的原因,AppStart.config和AppStart.exe是不能改名的!
2. 服务器端最好使用Windows 2000 Server . 使用Windows 2003 Server 会因为网络安全策略造成访问不了服务器目录资源,升级失败。
3. 服务器端需要把提供升级的该站点配置为允许目录浏览。
4. 文件的层次结构必须如下配置:
客户端执行程序目录结构如下
|
|
AppStart.exe (不能改名) | |
|
|
AppStart.config (不能改名) | |
|
|
ClientExe (这个目录名称可以自定,但必须同时修改AppStart.config的AppFolderName项内容) | |
|
|
|
TrySmartClient.exe(这个是自定的主应用程序) |
|
|
|
appupdater.dll (自动升级组件) |
其中AppStart.config内容如下:
<Config>
<AppFolderName>ClientExe</AppFolderName>
<AppExeName>TrySmartClient.exe</AppExeName>
</Config>
AppStart.config解释:
<AppFolderName>ClientExe</AppFolderName>
告诉AppStart.exe要寻找的主应用程序目录名称。
<AppExeName>TrySmartClient.exe</AppExeName>
告诉AppStart.exe要寻找的主应用程序名。
服务器端目录结构(该目录需要设置为允许目录浏览):
|
|
UpdateVersion.xml (必须,不能改名) | |
|
|
Ver (可自定,但必须同时修改UpdateVersion.xml的ApplicationUrl项内容) | |
|
|
|
TrySmartClient.exe (新版本主应用程序) |
|
|
|
mscorlib.Resources.dll (资源文件) |
|
|
|
system.Resources.dll(资源文件) |
其中UpdateVersion.xml内容如下:
<VersionConfig>
<AvailableVersion>
<ApplicationUrl>http://YourServerDomainName/SmartServer/Ver/</ApplicationUrl>
</VersionConfig>
UpdateVersion.xml解释:
<AvailableVersion>
告诉客户端目前可用的版本,客户端appupdater组件会比较本地主应用程序版本号和该项配置的版本号,如果比本地的版本号更高,则进行下载更新。
<ApplicationUrl>http://YourServerDomainName/SmartServer/Ver/</ApplicationUrl>
告诉客户端到哪个网址进行下载更新
按上述目录结构和配置文件内容,appupdater组件的关键属性配置应该如下:
|
AutoFileLoad |
:True |
|
ChangeDetectionMode |
ServerManifestCheck |
|
UpdateUrl |
http://YourServerDomainName/SmartServer/UpdateVersion.xml |
appupdater组件关键属性配置解释:
AutoFileLoad = true //允许自动文件装载
ChangeDetectionMode :ServerManifestCheck //检测模式:根据配置文件进行检测,也就是UpdateUrl属性指定的文件。
UpdateUrl :指定自动升级组件检测服务器端升级配置文件统一资源定位位置和文件名。(也就是网址)
上述配置在.Net Framework 1.1 和Windows2000下测试通过.
appupdater自动升级组件下载地址:http://c2c.6688.com/updateDown/appupdater.rar
现在我们来将它应用在实例中。
第一步:建立应用程序来进行更新
在这一步我们将建立应用程序来演示如何实现自动更新。
1. 使用VS.NET生成一个新的Windows应用项目,命名为“SampleApp”。
2. 给窗体一个你选择的有趣的背景色。我们将使用背景色来与后面更新的版本区别。
3. 现在让我们给这个应用程序增加一个细微的功能,首先给你的窗体增加一个按钮。压缩文件中包含一个拥有简单Windows窗体的程序集。给压缩文件中Samples\SampleApp\SimpleForm程序集增加一个引用。然后在你的按钮事件句柄中添加两行代码:
SimpleForm.Form
F.Show();
4. 将你的build标志从debug转换为RELEASE。这将允许我们避免稍后当我们生成一个应用程序的新版本而同时原始拷贝正在运行产生的pdb文件锁定问题。
生成并测试你的应用程序。
第二步:添加.NET应用程序更新组件
在这一步我们将给SampleApp添加.NET应用程序更新组件。
1. 在VS.NET工具栏的组件标签上,右击选择“自定义工具栏”。选择‘.NET框架组件’标签。点“浏览”并选择位于压缩文件中AppUpdater项目下的AppUpdater.dll,单击OK。
2. 一个AppUpdater图标现在应该出现在工具栏的组件列表的底部。将AppUpdater组件拖放到SampleApp窗体上。一个名为appUpdater1的.NET应用程序更新组件的实例会出现在窗体的底部。
第三步:设置.NET应用程序更新组件
在这一步我们将设置.NET应用程序更新组件。注意这个示例你只需改变最开始的四个属性,其它的,默认值就够了。
AppUpdater 属性 ――这是.NET Application应用程序更新的核心,对于本程序需要做以下设置:
|
属性名称 |
描述 |
|
AutoFileLoad |
这个控制后面要描述的命令下载特征,现在将它设置为true。 |
|
ChangeDetectionMode
|
该枚举决定如何为更新进行检查。在该例中,我们将使用一个服务器显式检查,因此将这个值设置为“ServerManifestCheck”。 |
|
ShowDefaultUI
|
.NET应用程序更新组件具有一系列用户界面来通知用户一些事件,对于该例我们将使用默认的用户界面,因此将这个值设置为true。 |
|
UpdateUrl
|
UpdateUrl是决定更新程序到何处去寻找更新的。在该例中设置为服务器显式文件的URL: http://cnandusa.com/SampleApp_ServerSetup/UpdateVersion.xml. 用你的Web服务器名称来代替”cnandusa.com/” |
Downloader 属性――AppUpdater组件有两个子组件。第一个称之为Downloader,它控制组件的下载和安装。下面是该属性的描述,对于我的示例来说默认的属性值就能工作的很好。
|
属性名称 |
描述 |
|
DownloadRetryAttempts
|
在下载期间如果有错误发生(比如Web服务器宕机)downloader会稍后重试。这个属性控制downloader认为是彻底的应用程序更新错误之前重试网络请求的次数。 |
|
SecondsBeteweenDownloadRety |
重试网络请求之前等待的秒数。 |
|
UpdateRetryAttempts |
这个属性控制试图更新的次数。 |
|
ValidateAssemblies
|
这个属性控制下载程序集有效完成的级别。更多信息参见这篇文章的安全一节。 |
Poller 属性――AppUpdater的第二个子组件是Poller。Poller控制更新检查。下面是该属性的描述,对于我们的示例而言,所有的默认属性值就工作的很好。
|
属性名称 |
描述 |
|
AutoStart
|
布尔值,在应用程序启动时控制Poller是否应当开始轮询或它是否应当等待直到有计划的显式开始。 |
|
DownloadOnDetection |
布尔值,控制Poller在一个新的更新发现时是否立即开始下载更新,或者是否通过调用DownloadUdpate()方法必须开始显式下载。 |
|
InitialPollInterval |
应用程序启动后在第一次执行更新检查前等待的秒数。 |
|
PollInterval
|
第一次更新检查之后,PollInterval |