走出“浏览器”的Web应用程序

走出“浏览器”的Web应用程序

Silverlight 3.0应用程序可以脱离浏览器而独立运行,这是一个很值得关注的改变。这意味着浏览器不再是Web应用程序客户端唯一的选择,同时,这也大大简化了Silverlight应用程序在手机等智能移动设备上的开发,提升了Silverlight应用程序的运行性能,并且可以充分利用客户端硬件所拥有的处理能力。

本文介绍如何使用VS2010 BETA2来开发可独立于浏览器的Silverlight应用程序。

1 Silverlight应用程序独立运行

使用Visual Studio 2010,可以很方便地将一个现有的Silverlight应用程序转换为独立运行。

具体操作很简单,在Visual Studio 2010中打开Silverlight项目的属性页,在其Silverlight选项卡中选中“Enable running application out of the browser”选项,如下图所示:

走出“浏览器”的Web应用程序

点击右部的“Out-of-Browser Settings…”,可以设置更多的选项:

走出“浏览器”的Web应用程序

可以看到,在这个对话窗口中可以设置图标,窗体大小等一些参数。最有趣的是左下角的两个参数:

l Use GPU Acceleration:使用本机显卡的硬件加速,当Silverlight应用程序使用了大量的动画时,选中此项可以提升运行速度。之所以可以做到这点,是由于Silverlight应用程序是在客户端直接执行的,Silverlight运行时可以直接调用本地硬件所提供的计算能力。

l Show install menu当选中此项时,在浏览器中右击,会在右键菜单中多一项命令:

XXX 安装到此计算机

执行此命令,将出现一个向导:

走出“浏览器”的Web应用程序

单击确定即可安装。

多懂一点:

保存与执行下载的Silverlight应用程序文件

默认情况下,下载的Silverlight程序文件放置于当前登录用户的个人数据文件夹下,请在安装Windows的驱动器上查找以下文件夹,就可以发现下载的Silverlight程序文件放在此文件夹的子文件夹(比如“40171400.localhost”)里。

/Users/登录用户名/AppData/LocalLow/Microsoft/Silverlight/OutOfBrowser/ 40171400.localhost

上面的数字是由Silverlight安装程序随机生成的,用于区分本机所安装的Silverlight应用程序。

Silverlight应用程序的执行是由一个名为sllauncher.exe的程序负责的,它将接收一个保存了Silverlight应用程序文件的文件夹名。

/Program Files/Microsoft Silverlight/sllauncher.exe 40171400.localhost

有趣的是,安装到本地的Silverlight应用程序不会出现的控制面板“添加删除程序”的列表中,如果要删除程序,需要先运行它,然后右击,从弹出菜单中选择“删除此应用程序”命令。

要删除Silverlight应用程序,需要完成两个步骤:

(1) 删除保存于用户文件夹中的程序文件

(2) 删除快捷方式。

2 编程控制Silverlight应用程序的安装过程

我们可以在Silverlight应用程序中使用代码来直接启动安装过程,这需要调用Application对象的Install()方法。

App.Current.Install();

上面代码中的App.Current引用当前的Silverlight Application对象实例。

注意:

如果没有给Silverlight项目设定“Enable running application out of the browser”选项,直接调用Install()方法强制安装Silverlight应用程序到本地,则Silverlight插件将会引发一个ManagedRuntimeError,应用程序将会被强制结束。

另外,如果本Silverlight应用程序已经安装到本地了,再次调用Install()方法会引发一个InvalidOperationException异常。

应用程序可以通过检测一下Aplication对象的InstallState属性来避免二次安装。

if (App.Current.InstallState == InstallState.NotInstalled)

App.Current.Install();

else

tbInfo.Text = "本应用程序已经安装,谢谢使用!";

另外,Aplication对象提供了一个InstallStateChanged事件用于跟踪安装状态的改变,可以编写代码响应此事件,通知用户安装完成:

//在页面构造函数中挂接InstallStateChanged事件

App.Current.InstallStateChanged +=

new EventHandler(Current_InstallStateChanged);

以下是事件响应代码:

void Current_InstallStateChanged(object sender, EventArgs e)

{

if (App.Current.InstallState == InstallState.Installed)

tbInfo.Text = "安装完成,您可以直接在桌面或开始菜单中运行此应用程序";

}

另外,Aplication对象还有一个IsRunningOutOfBrowser属性用于检测Silverlight应用程序是否运行于浏览器环境内。

示例程序项目OutOfBrowserSilverlightApplication综合了上述编程技巧,展示了一个Silverlight应用程序的安装与卸载的基本方法。

走出“浏览器”的Web应用程序

下载示例源码