• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Tony Qu
我的软件工作室
博客园    首页    新随笔    联系   管理     

Application Updater Block v2.0 更新检查过程分析

更新判断方式与v1.0的区别
v2.0不再使用版本号来区分更新是否可用,而是采用manifest ID+application ID来判断,对于每一个新的更新,即使是同一个应用程序,必须更新manifest ID。同时要注意,一个应用程序的application ID一旦确定就不能随意改变,因为客户端的配置文件中,已经写入了确定了的application ID,不能改变,当然你可以尝试通过更新客户端的配置文件来改变application ID。

更新检查 调用过程
1. 客户端新建一个ApplicationUpdaterManager实例,ApplicationUpdaterManager将负责整个升级过程控制
2. 调用ApplicationUpdaterManager的CheckForUpdates()方法
3. CheckForUpdates()内部调用CheckForUpdates(Uri Location)方法,其中的Location是服务器端Manifest文件的url路径,可通过UpdaterConfigurationView.DefaultManifestUriLocation获得。
4. CheckForUpdates(Uri Location)中有两个处理过程,一个是处理上一次更新过程中未完成的更新,一个是从服务器段下载最新的manifest文件,并判断是否要进行更新。
5. CheckForPendingUpdates()是专门用来处理未完成的更新的,该函数通过调用RegistryManager.Tasks属性获得未完成的任务列表。让我们来看看Tasks属性的实现
private Hashtable Tasks
{
    
get
    
{
        
if ( !loaded )
        
{
            Load();
            loaded 
= true;
        }

        
return registry;
    }

}
如果Tasks没有初始化过,则会调用Load()方法,该方法枚举每一个在AppRoot/registry中的文件,并将这些文件的句柄传给LoadTask()方法,最后会把每一个保存在registry目录下的未完成任务读入Tasks,这样就可以把这些任务传给ApplicationUpdaterManager.OnPendingUpdatesDetected()事件进行处理。
6. 下载和获得Manifest文件则是通过ManifestManager.GetManifests()方法完成的。

客户端目录用途
    AppRoot/registry        存放未完成的task信息文件(xml格式)
    AppRoot/applications    存放应用程序的升级文件和相关设置,该目录下有若干个目录,这些目录都对应一个应用程序的升级,每一个应用程序的升级文件分别保存在相应的目录下。

版权声明:本文由作者Tony Qu原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
posted @ 2005-04-07 20:38  找事的狐狸  阅读(2191)  评论(4)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3