`

有关试用Silverlight OOB模式遇到的一些问题

阅读更多

1、自动更新OOB模式的问题以及怎样避免需要数字签名

   关于OOB模式的在线更新需要自己实现如下代码:

 1 private void OnCheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)

 2 {

 3    if (e.UpdateAvailable && e.Error == null)

 4    {

 5       MessageBox.Show("应用新版本已经下载成功,将在下次启动时生效。");

 6    }

 7    else if (e.Error != null)

 8    {

 9       MessageBox.Show("在检测应用更新时, 出现以下错误信息:"

10           + Environment.NewLine

11           + Environment.NewLine                      

12           + e.Error.Message);    

13    }

14 }

然后,添加声明在App的构造函数中,使其在安装时进行版本更新检查:

 1 public App()

 2 {

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

 4    {

 5       App.Current.CheckAndDownloadUpdateCompleted += OnCheckAndDownloadUpdateCompleted;

 6       App.Current.CheckAndDownloadUpdateAsync();

 7    }

 8 

 9    this.Startup += this.Application_Startup;

10    this.Exit += this.Application_Exit;

11    this.UnhandledException += this.Application_UnhandledException;

12 

13    InitializeComponent();

14 }

 

        如果你是本机运行,以上代码就已经足够了,可是一旦发布,在检验更新时就会出现异常,原因是你的silverlight程序对用户来说并不是可以完全信任 的程序,如果想解决这个问题,就需要对xap进行数字签名,即给silverlight程序发布一个证书,证明它是安全可靠地,是可以完全信任的。有关这 里的详细信息可以参考

 http://msdn.microsoft.com/library/dd550721(VS.95).aspx 中的检查应用程序更新一节,可是怎样进行数字签名呢,可以参考http://www.cnblogs.com/chuifeng/archive/2010/08/20/1804294.html , 但是我按照上面的方法始终未能得到pfx数字证书文件,哪位朋友如果照此方法搞定了可以告诉我一声。

 

        我最后是通过VS自带的一个功能搞定的:右键单击Silverlight工程的Properties选项,在Properties选项的左边有个 Signing选项,勾选上Sign the Xap File,点击第三个按钮Create Test Certificate,接下来按照提示做,最后会在你的silverlight工程下生成一个.pfx文件,最后再点击第二个按钮Select Form File选中这个文件就行了。

 

        但是这生成的只是一个测试用的证书,正式版的是要花钱买的。为了避免花钱,网上到时有人提供了这样的方法<http://www.hz328.com/2010/0925/53314.html  > :将你的silverlight项目设计成插件式架构,分模块加载初始化,可以暂时的避免OOB的自动更新问题,理论上只要主题框架不修改,其他的功能模块修改了部署在web服务器上,主体框架按需下载是可以的。

 

        这里我想应该可以通过MEF动态加载来实现,一开始只加载一个永远不需要更新的默认页面,其他可能需要更新的模块全部采用动态加载。

 

2、OOB模式Silent Install的方法

 

先看看具体的silent安装命令格式:

 

"C:\Program Files\Microsoft Silverlight\sllauncher.exe"  

/install:"C:\SilverlightOOBDemo\SilverlightOOBDemo.xap"  

/origin:http://localhost:29162/ClientBin/SilverlightOOBDemo.xap 

/shortcut:desktop+startmenu  

/overwrite   

 

从上面的命令中可以看出sllauncher添加部分参数后,实现不同的功能操作,例如

/install:“XAP文件目的路径”,这个参数是允许开发人员自定义XAP文件安装路径,可以是本地磁盘,也可以是网络路径。这个参数是silent安装模式必需的参数。

/origin:"XAP文件源路径",这个参数是设置XAP文件的源URL,其目的是为了自动更新而设。作为官方推荐设置该参数,保证其应用自动更新。

/shortcut:desktop+startmenu,从字面意思就可以看出,这个参数是创建应用快捷方式 的,desktop+startmenu为在桌面和开始菜单都创建该应用快捷方式,如果只想创建桌面快捷方式,使用/shortcut:desktop即 可,创建开始菜单快捷方式与之同理。

/overwrite,这个选项是确认当前安装XAP文件是否覆盖已经安装过的XAP文件,通常来说,我们都会设置覆盖,这样保持应用为最新版本。

 

另外我们再介绍两个常用sllauncher命令参数:

/emulate:“XAP文件目的路径”,该命令参数允许安装OOB应用后,自动运行该应用,就像现在很多软件自带的autorun功能相似。

使用方法:

 

"C:\Program Files\Microsoft Silverlight\sllauncher.exe"  

/emulate:"C:\SilverlightOOBDemo\SilverlightOOBDemo.xap"  

/origin:http://localhost:29162/ClientBin/SilverlightOOBDemo.xap 

/overwrite   

 

 

/uninstall,该命令参数允许开发人员通过命令的方式卸载Silverlight OOB应用。其使用方法:

 

"C:\Program Files\Microsoft Silverlight\sllauncher.exe"  

/uninstall

/origin:http://localhost:29162/ClientBin/SilverlightOOBDemo.xap 

 

链接地址: http://kevinfan.blog.51cto.com/1037293/370788

 

注:我试用了Silent install,原先以为它会根据/origin所指的远程地址将xap自动安装到/install所指的本地路径上,后来发现原来xap包需要自己去实 现下载,然后将其放到本地路径中,接着将这个本地路径 作为/install的路径参数,Silent install充其量只将本地的xap不经任何提示进行安装。

         接着会有这样一个问题,不管是将上述的命令代码写在单独的.bat 文件中,还是将其直接写在C#代码中,这都需要通过OOB模式下的COM交互进行调用,可是这就是为了安装OOB模式,所以只可能是在浏览器状态下执行, 这肯定没有这个权限。故我想Silent install的执行方式只可能是这样:将命令代码写在.bat文件中,然后让你用户自己去执行.bat文件,问题是这样就失去了Silent install的意义。并且我们还要将.bat放在服务器端,让用户打开网页时自动下载到本地,可是由于处在浏览器的状态下,silverlight是没 有权限去直接访问本地路径的,除了弹出savefiledialog,可是这样又多了一个让用户选择路径的操作,这岂不是比让它默认点右键安装更加复杂。

 

3、OOB模式的权限问题

       OOB模式访问本地文件:默认只能访问以“My”开头的文件夹,即“我的文档”、“我的音乐”之类的,如果想访问别的本地路径,需要通过com,如下:

 3 using (dynamic fsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject"))

 4 {

 5     dynamic file = fsoCom.CreateTextFile(@"c:\test.txt", true);

 6     file.WriteLine("Hello Silverlight 4.");

 7     file.WriteLine("Silverlight写文件到C:\\");

 8     file.Close();

 9 }

 

       另外OOB模式还可以通过Com去执行其他程序、读写注册表。如:

       (1)直接运行DOS命令:

3  using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))

4  {

5     shell.Run(@"cmd /k ping www.cnblogs.com  -t");

6  }

 

       (2)运行其他程序:使用WShell API 模拟用户输入实例。使用WShell的SendKeys可以模拟用户输入效果到应用程序中,并且可以模拟一些特殊键功能,例如,Enter,Tab,Ctrl等按键。

3   using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))

4   {

5      shell.Run(@"c:\windows\notepad.exe");

6      shell.SendKeys("my blog:{Enter}jv9.cnblogs.com");

7   }

 

        (3)读取注册表:读取“HKLM\Software\Microsoft\ASP.NET\RootVer”,.Net Framework的版本。

3   using (dynamic WShell = AutomationFactory.CreateObject("WScript.Shell"))

4   {

5      string reg = WShell.RegRead(@"HKLM\Software\Microsoft\ASP.NET\RootVer");

6      MessageBox.Show(".Net Framework Root Version: " + reg);

7   }

 

        (4)写入注册表:实现添加Silverlight Out of Browser应用到Windows启动项。

 

 3  using (dynamic ShellApplication = AutomationFactory.CreateObject("Shell.Application"))

 4  {

 5     dynamic commonPrograms = ShellApplication.NameSpace(11);

 6     string allUsersPath = commonPrograms.Self.Path;

 7 

 8     dynamic directory = ShellApplication.NameSpace(allUsersPath + @"\Programs");

 9     dynamic link = directory.ParseName(

10           Deployment.Current.OutOfBrowserSettings.ShortName + ".lnk");

11     string OOBLink = link.Path;

12 

13     using (dynamic WShell = AutomationFactory.CreateObject("WScript.Shell"))

14     {

15        WShell.RegWrite(@"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\"

16             + Deployment.Current.OutOfBrowserSettings.ShortName,OOBLink);

17        MessageBox.Show("请重启你的机器,你的应用将被自动载入启动列表.");

18     }

19  }

 

但OOB模式不是拥有修改任意注册表的权限,最典型的就是修改任务管理器的注册表(HKCU\Software\Microsoft \Windows\CurrentVersion\Policies\system\DisableTaskMgr,如果以silverlight工程作 为起始工程,通过debug直接运行OOB模式,修改任务管理器是可以的,但若是以web为起始工程,一开始运行浏览器,那这个操作会被拒绝,这两种运行 方式会有权限差异,这一点很不爽,因为以web工程起始运行是无法调试OOB的,只能以Silverlight工程起始运行方能调试OOB,但这样往往你 执行一个权限较高的操作,在调试中通过了,但是已发布就不行了,所以千万不能全信debug结果)。

        另外我还想了一个歪招,就是写一个.bat程序,通过.bat去修改任务管理器的注册表,如果直接运行.bat是可以实现效果的,所以我想用 OOB的com去调用这个.bat程序,按照正常想法,这总该可以了。但是,结果却是:调用这个.bat程序是可以的,但是.bat程序执行结果依然是被 拒绝,依照我的想法,貌似这个.bat程序的权限被silverlight给带低了,即使给予管理员权限都不行。

 

注释:这里的代码都是来自博客园JV9的博客 <http://kb.cnblogs.com/page/70802/ > ,那里面说的较详细,我也是从那里学习的。这里主要是我试用OOB模式过程中遇到的一些问题,可能有些问题不是问题,只是我对OOB理解有误照成的,说错的地方希望大家能够指正,也希望大家了解OOB模式的,能给我提供一些指点,我现在急想弄明白这个。

分享到:
评论

相关推荐

    Silverlight 客戶端桌面模式(OOB 模式)

    **Silverlight 客户端桌面模式(OOB模式)详解** Silverlight,作为微软开发的一种富互联网应用程序(RIA)技术,允许开发者创建交互性强、视觉效果丰富的网络应用。在 Silverlight 的众多特性中,"Out-of-Browser...

    Silverlight OOB应用源码

    Silverlight是微软推出的一种富互联网应用程序(RIA)平台,它允许开发者创建具有丰富视觉效果和交互性的应用程序,这些应用程序可以在网页上运行,也可以以“Out-of-Browser”(OOB)模式独立于浏览器运行。...

    Silverlight OOB.rar

    **Silverlight OOB技术详解** Silverlight是一款由微软开发的富互联网应用程序(RIA)平台,它为Web开发者提供了丰富的媒体体验和交互式用户界面设计工具。"OOB"是"Out-Of-Browser"的缩写,是Silverlight的一个重要...

    Silverlight OOB Demo

    下面我们将深入探讨Silverlight OOB Demo的相关知识点。 1. **Silverlight OOB介绍** - OOB模式使得Silverlight应用可以被安装在用户的桌面上,无需依赖浏览器插件。 - 用户可以通过右键点击Silverlight应用,...

    使用Silverlight5 在vs2010平台上设计OOB模拟浏览器访问网页

    OOB模式为Silverlight应用提供了更大的灵活性,比如可以访问桌面级的API,甚至在没有网络连接的情况下也能工作。 首先,我们需要在Visual Studio 2010中创建一个新的Silverlight项目,并选择"Silverlight 5 ...

    Silverlight4.0 Demo

    Silverlight 4.0 OOB 模式的新特性: 新增了 Closing 事件 实现程序在 OOB 模式下的自动更新 NotificationWindow - 在 OOB 模式下显示通知窗口,也就是 toast 实现自定义的 NotificationWindow Silverlight ...

    Silverlight弹出窗口Demo

    1.解决多个弹出窗口时遮罩层重复问题,现在多个...2.解决多个弹出窗口中有一个窗口为模式对话框的情况下,关闭此模式对话框将不会取消模式遮罩层的问题 3.解决多个弹出窗口的情况下,点击后台窗口将其置于最上层的问题

    Silerlight OOB 导出到Excel(2007up)

    需要注意的是,由于Silverlight的安全限制,直接在客户端操作文件流可能会遇到问题。因此,通常需要通过服务器作为中介来处理文件生成和下载过程。 此外,为了提高用户体验,可以考虑在导出过程中显示进度指示器,...

    silverlight 5下载全

    7. **离线应用支持**:通过Out-of-Browser(OOB)功能,Silverlight 5的应用程序可以脱离浏览器独立运行,并且可以设置为桌面图标,提供类似桌面应用的体验。 ### 包含的文件详解 1. **Silverlight5_Tools.exe**:...

    Silverlight完美入门.rar

    最后,你将了解Silverlight的部署和生命周期管理,以及如何利用Silverlight OOB(Out-of-Browser)功能,使应用能在桌面环境中运行。 总之,《Silverlight完美入门》涵盖了Silverlight开发的各个方面,无论你是Web...

    OOB modem 配置文档

    文档末尾提供了联系人信息,如Johnnie Shen为网络工程师,提供了他的职位、电子邮件和电话号码,便于在配置或使用Modem时遇到问题时进行联系。 综合以上信息,一个有效的OOB Modem配置和管理过程包括了硬件连接、...

    silverlight

    9. **OOB(Out-of-Browser)应用**:Silverlight 2引入了OOTB功能,允许应用程序在浏览器之外以桌面应用的形式运行,增强了应用程序的离线能力和安全性。 10. **编程模型**:Silverlight使用C#或VB.NET作为主要的...

    Silverlight操作客户端注册表

    包含内容: 1.SilverlightOOB模式下将其加入客户端的...2.OOB模式下从开机自动启动项中移除; 3.OOB模式下遍历客户端数据库; 4.TXT、XML、数据库等方式记录操作日志; 5.Silverlight通过RIA获取服务器的已安装软件。

    silverlight 5安装包

    6. **企业级功能**:Silverlight 5为商业应用提供了更多支持,如Out-of-Browser (OOB)模式,允许应用在浏览器外部运行,提供类似桌面应用的体验。 然而,要充分利用这些特性,开发者需要在计算机上安装Visual ...

    Silverlight环境下使用调用网页使用超链接

    OOB模式允许Silverlight应用在不依赖浏览器的情况下运行,拥有更多的系统级权限,例如桌面集成、通知区域图标等。这对于创建类似浏览器的本地应用非常有用。 对于电子地图的实现,Silverlight提供了多种库和API,...

    Silverlight视频录制

    - NESL可能需要特定的权限才能运行,确保在Silverlight OOB应用中启用了必要的权限设置。 - 考虑到兼容性和跨平台性,使用NESL可能会限制应用的受众范围,因为不是所有用户都愿意或能够安装和运行具有这些扩展功能的...

    Silverlight4.0 Demo 源码

    2.Silverlight 4.0 OOB 模式的新特性 3.Silverlight 4.0 用户界面(UI)相关 4.Silverlight 4.0 其它 5.Silverlight 4.0 媒体方面的增强 6.Silverlight 4.0 数据验证 7.Silverlight 4.0 MVVM 模式 8.Silverlight 4.0...

    silverlight 2.0 安装文件

    - **Silverlight20**、**Library**、**Silverlight20.Web**:这些可能是项目文件夹,包含着实际的Silverlight应用程序源代码、库文件和Web部署相关文件。 通过以上分析,我们可以看到,Silverlight 2.0是一个强大且...

    Silverlight入门

    - **MVVM模式**:探讨Model-View-ViewModel模式在Silverlight中的应用,提高代码组织和可测试性。 - **性能优化**:了解如何减少Silverlight应用的内存占用和提高运行效率。 - **Silverlight安全性**:学习...

    silverlight上传示例

    8. **OOB支持**:如果需要离线或桌面应用的功能,可以设置Silverlight应用为OOB模式,这样即使在离线状态下也能使用文件上传功能。 9. **优化性能**:对于大文件上传,可以考虑分块上传或断点续传,以提高上传效率...

Global site tag (gtag.js) - Google Analytics