迎风醉倒

以十年背影换一背景

博客园 首页 联系 订阅 管理

初学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文件中的文本框内容,增加一句话:“君不见高堂明镜悲白发,朝如青丝暮成雪”,生成项目,浏览网页,页面显示更新后的内容:“君不见黄河之水天上来,奔流到海不复回.君不见高堂明镜悲白发,朝如青丝暮成雪.”。

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

 

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

 

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

其实貌似已经够详细了~

 

 

 

posted on 2010-09-20 10:27  迎风醉倒  阅读(1664)  评论(5编辑  收藏  举报