走出“浏览器”的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”选项,如下图所示:
 
 
 
点击右部的“Out-of-Browser Settings…”,可以设置更多的选项:
 
 
         可以看到,在这个对话窗口中可以设置图标,窗体大小等一些参数。最有趣的是左下角的两个参数:
 
l  Use GPU Acceleration:使用本机显卡的硬件加速,当Silverlight应用程序使用了大量的动画时,选中此项可以提升运行速度。之所以可以做到这点,是由于Silverlight应用程序是在客户端直接执行的,Silverlight运行时可以直接调用本地硬件所提供的计算能力。
 
l  Show install menu当选中此项时,在浏览器中右击,会在右键菜单中多一项命令:
 
    XXX 安装到此计算机
 
执行此命令,将出现一个向导:
 
 
        
 
单击确定即可安装。
 
多懂一点:
 
       保存与执行下载的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应用程序的安装与卸载的基本方法。