现在的位置: 首页 > 综合 > 正文

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

2012年11月19日 ⁄ 综合 ⁄ 共 1227字 ⁄ 字号 评论关闭
更新判断方式与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    存放应用程序的升级文件和相关设置,该目录下有若干个目录,这些目录都对应一个应用程序的升级,每一个应用程序的升级文件分别保存在相应的目录下。

抱歉!评论已关闭.