zoukankan      html  css  js  c++  java
  • Silverlight 5 OOB应用程序不能正常更新的特殊情况

    之前开发了一个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节点;于是把这两个节点删除后,经测试就可以更新成功了。

    分享到: 更多
  • 相关阅读:
    Oracle notes
    jQuery笔记
    sql developer 要求enter the full pathname for java.exe
    [Error] WCF: SOAP security negotiation
    Unity
    Windows Form 开发笔记
    WP开发 资料整理
    乔迁新居:http://longwarelive.spaces.live.com/
    2008年1月1日启用 longware@live.cn
    《程序员》杂志揭晓2007软件中国年度评选
  • 原文地址:https://www.cnblogs.com/redmoon/p/2387233.html
Copyright © 2011-2022 走看看