初学Silverlight,记录下自己的成长,也与大家一起分享。 欢迎多多来做客~ 刚开始写博客,不妥之处请多多指正@:) 您的支持和回复是我最大的动力 环境:Win 2003 server SP2 , Silverlight 4.0 ,IE7.0 浏览器外运行(Out Of Browser),从Silverlight 3.0 版本开始支持,
  

初学Silverlight,记录下自己的成长,也与大家一起分享。

欢迎多多来做客~

刚开始写博客,不妥之处请多多指正@:)

您的支持和回复是我最大的动力

环境:Win 2003 server SP2  , Silverlight 4.0 ,IE7.0

浏览器外运行(Out Of Browser),从Silverlight 3.0 版本开始支持,添加了可以脱离浏览器运行的功能。

将程序下载到本地运行,通过快捷方式打开Silverlight程序,so cool!

具体实现也非常容易,本文核心部分在于解决浏览器外运行的应用程序更新问题,即当用户下载到本地后,服务器发布了新版本,如何支持自动更新。

首先,新建Silverlight应用程序,命名为OutOfBrowser,默认创建承载应用程序的网站名称为OutOfBrowser.Web.如下图所示,点击确定。

创建的解决方案默认情况:

打开MainPage.xaml文件,新增一个TextBlock控件,Text属性修改为“君不见黄河之水天上来”:

Mainpage.xaml
 
     
< UserControl x:Class ="OutOfBrowser.MainPage"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
d:DesignHeight
="300" d:DesignWidth ="400" >

< Grid x:Name ="LayoutRoot" Background ="White" >
< TextBlock Height ="23" HorizontalAlignment ="Left" Margin ="10,10,0,0" Name ="textBlock1" Text ="君不见黄河之水天上来" VerticalAlignment ="Top" />
</ Grid >
</ UserControl >

右键点击OutOfBrowser项目,选择“属性”,在Silverlight选项卡中,选中“允许在浏览器外运行程序”:

 

生成OutOfBrowser项目,在OutOfBrowser.Web项目的ClientBin目录下,自动加载了OutOfBrowser.xap文件。此时在OutOfBrowser.Web中右键点击OutOfBrowserTestPage.aspx页面,选择“在浏览器中查看”,页面显示“君不见黄河之水天上来”。右键点击页面,选择“将OutOfBrowser应用程序安装到此计算机”,可以选中在开始菜单及桌面上添加快捷方式。安装后,自动打开页面,展示内容相同。

关闭网页和弹出的应用程序。修改MainPage.xaml文件中的文本框内容,增加一句话:“奔流到海不复回”,生成项目,浏览网页,页面显示更新后的内容:“君不见黄河之水天上来,奔流到海不复回”。运行桌面版的应用程序,仍然显示原内容:“君不见黄河之水天上来”。问题出现,如何在程序安装到桌面后,自动更新新版本?

下面来解决这个问题。

打开OutOfBrowser项目中App.xaml.cs,在public App()函数中,添加更新事件:

代码
 
     
public App()
{
this .Startup += this .Application_Startup;
this .Exit += this .Application_Exit;
this .UnhandledException += this .Application_UnhandledException;

// 检查更新
this .CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler(App_CheckAndDownloadUpdateCompleted);
this .CheckAndDownloadUpdateAsync();

InitializeComponent();
}

CheckAndDownloadUpdateAsync方法以异步方式检查更新(如果需要,则下载最新版本)

当应用程序已经完成更新检查并下载完成后,将触发CheckAndDownloadUpdateCompleted事件。

我们在此实现App_CheckAndDownloadUpdateCompleted方法:

代码
 
     
// 检查更新并下载完毕
void App_CheckAndDownloadUpdateCompleted( object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
// throw new NotImplementedException();
if (e.UpdateAvailable)
{
MessageBox.Show(
" 发现新版本的Silverlight应用程序 " +
" ,请重新启用您的应用程序! " );
}
else if (e.Error != null &&
e.Error
is PlatformNotSupportedException)
{
MessageBox.Show(
" 发现新版本Silverlight应用程序, " +
" 但是不能运行在您的Silverlight版本中,请访问程序主页更新。 " );
}
else
{
MessageBox.Show(
" 没有新版本应用程序需要更新! " );
}

}

编译应用程序,并运行。在页面上点击右键,删除应用程序,然后重新安装。安装完毕后,自动打开桌面版应用程序,并弹出提示信息“没有新版本应用程序需要更新!”。说明检查更新的功能已经调用。下面测试是否正常运行。

再次修改MainPage.xaml文件中的文本框内容,增加一句话:“君不见高堂明镜悲白发,朝如青丝暮成雪”,生成项目,浏览网页,页面显示更新后的内容:“君不见黄河之水天上来,奔流到海不复回.君不见高堂明镜悲白发,朝如青丝暮成雪.”。

运行桌面版的应用程序,提示有新版本需要更新,更新后,提示用户重新启动。关闭应用程序,重新启动,提示没有新版本,说明已经更新,再看内容,也是最新的版本。程序按照我们的逻辑正常运行并生效。

这种提示方式旨在验证更新的机制,大家可以根据实际需要进行修改和拓展。

暂时不晓得如何上传源码,有需要的朋友可以留下邮箱地址。

其实貌似已经够详细了~

点击查看原文地址