Silverlight 5 OOB应用程序不能正常更新的特殊情况

 转自http://www.cnblogs.com/redmoon/archive/2012/03/09/2387233.html

 

之前开发了一个Silverlight 5的OOB应用程序,但是在更新上遇到一种特殊情况。

OOB应用程序的更新方式

承载在浏览器中的Silverlight应用程序可以自动更新,但是OOB应用程序可能处于安全性的看哦啊率却不能自动更新,需要调用一个检查更新的方法来手动执行更新。

首先为Application的CheckAndDownloadUpdateCompleted事件注册一个处理程序,如下:

            _app = Application.Current;             if (_app.IsRunningOutOfBrowser)                 _app.CheckAndDownloadUpdateCompleted += Application_CheckAndDownloadUpdateCompleted; 

然后在创建一个更新按钮,在按钮点击事件中添加检查更新的代码,如下:

        private void button1_Click(object sender, RoutedEventArgs e)         {             if (_app.IsRunningOutOfBrowser && NetworkInterface.GetIsNetworkAvailable())                 _app.CheckAndDownloadUpdateAsync();         }

当然,以上代码也可以放到页面加载事件中,让程序每次启动的时候都自动检查更新,但是最佳实践是,创建一套自动检查版本的机制,然后提示用户有更新,再运行上述代码。

最后,就是编写更新完成后的处理代码,如下:

        void Application_CheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)         {             if (e.Error != null)             {                 if (e.Error is PlatformNotSupportedException)                     MessageBox.Show("App_NeedUpgradePlatform");                 else                     MessageBox.Show("App_UpgradeError: " + e.Error.Message);                 return;             }              if (e.UpdateAvailable)                 MessageBox.Show("App_UpgradeCompleted");             else                 MessageBox.Show("App_NoUpdate");         }

这就是更新OOB应用程序的基本方法。

提升信任后的OOB应用程序更新

MSDN文档中对于提升信任后的OOB应用程序的更新,有一个特殊说明,如下:

Silverlight 4 为运行具有提升的信任的浏览器外应用程序提供支持。受信任的应用程序不能使用本节中描述的更新机制,除非应用程序和更新都使用同样有效的、代码签名证书进 行了签名。若要更新没有有效签名的受信任的应用程序,用户必须卸载旧版本并且手动安装新版本。有关更多信息,请参见受信任的应用程序

这句话的意思就是,如果前后更新使用了不同签名文件,或者老版本没有签名,新版本进行了签名,这两种情况都会导致不能进行更新,需要卸载重装。

也就是这句话误导了我半天。

经历不能更新的特殊情况

我开发的OOB应用程序一开始是可以进行更新的,后来不知为何不能进行更新了。寻找了各种原因,尝试了各种方法,推测了各种情况,都无果而终。

最后,我单独建立了一个测试项目来对比测试,在所有配置和代码都一样的情况却可以更新,让我开始考虑是否是Silverlight SDK有问题。在对比了整个项目的文件后,发现测试项目比正式项目少一个文件——InBrowserSettings.xml。这个文件其实是 Silverlight 5提供的一个新特性,即在浏览器内提升信任功能生成的一个配置文件。

这个文件估计是什么时候,我尝试勾选”提升浏览器内信任“的选项的时候,生成的;于是我删除了InBrowserSettings.xml这个配置 文件。还是问题依旧,不过感觉已经接近问题所在了。之前有过经验,一些配置信息之csproj中也会记录,所以打开csproj文件,发现里面有 InBrowserSettingsFile和RequireInBrowserElevation节点;于是把这两个节点删除后,经测试就可以更新成功 了。

你可能感兴趣的:(silverlight)