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模式的,能给我提供一些指点,我现在急想弄明白这个。

转载于:https://www.cnblogs.com/modify/archive/2010/09/30/modify_first_page.html

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

  1. silverlight数据绑定模式TwoWay,OneWay,OneTime的研究

    asp.net开发中,数据绑定是一个很简单的概念,控件与数据绑定后,控件可以自动把数据按一定的形式显示出来.(当然控件上的值改变后,可以通过提交页面表单,同时后台服务端代码接收新值更新数据) silv ...

  2. Silverlight OOB Setup

    Sl的安装大家都知道:在程序点右键,选择安装. 有没有另外一种方法,类似普通软件那样,通过安装包安装? 答案当然是 有 参考:http://www.code Technorati 标签: projec ...

  3. 分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)

    分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日) 本周Silverlight学习资源更新 Silverlight App.xaml用途 Jaso ...

  4. Silverlight 5 Beta新特性[3]多窗口支持

    前面两篇分别介绍Silverlight 5 Beta中XAML数据绑定支持的断点调试和鼠标的多重点击实现. 本篇将解析Silverlight 5 Beta版本中对OOB模式下多窗口的支持. 谈到Sil ...

  5. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月23日-7月29日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月23日-7月29日) 本周Silverlight学习资源更新 Silverlight OOB模式下COOKIE处理 ...

  6. Silverlight 5 RC新特性探索系列:12.Silverlight 5 RC 窗口模式下访问自定义DLL和WIN32 API...

    在Silverlight 5 RC版本中针对访问权限进行了相应的提升,它的项目属性中新增了一个复选框"在浏览器内运行时需要提升的信任",如下图: 它将为在浏览器模式下运行的应用程序 ...

  7. Silverlight的OOB特性

    Out Of Brower 传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据, ...

  8. Silverlight 3 OOB 原理

    Silverlight 3 OOB 名词解释 OOB (Out of Browser): Silverlight 3新特性之一.在浏览器中运行的Web应用界面与传统桌面软件比起来总是死板,不够灵活的. ...

  9. Silverlight实例教程 - Out of Browser开篇

    众所周知,学习一门IT技术,最关键的是实践,无论是软件开发还是网络调试,只要在真实环境下勤于动手和思考,很快就能掌握一门技术,Silverlight也不例外.为了帮助更多朋友快速学习掌握Silverl ...

最新文章

  1. Vue.js 技术揭秘学习 (2) Vue 实例挂载的实现
  2. faster rcnn流程
  3. [react] createElement与cloneElement两者有什么区别?
  4. oracle 找不到程序,Oracle 找不到监听程序
  5. linux上pyenv卸载,在Ubuntu 18.04系统下安装pyenv的方法
  6. java 如何实现对象克隆_Java对象克隆
  7. seaborn 0.9 中文文档翻译完成 | ApacheCN
  8. 微信小程序学习资料[转]
  9. php去掉文字空白换行,php去掉空格换行的方法
  10. Java实现面向对象编程
  11. PASCAL VOC2012数据集分析
  12. quartz定时任务properties
  13. 围棋棋手、电影、境界层次
  14. Android 不透明度对应数值
  15. Java类型转换简单运用
  16. 【QT】找茬外挂制作
  17. 用插值法求国债收益率
  18. 嘉兴 机器人仓库 菜鸟_菜鸟智能机器人仓库启用 助力包裹分得又快又好
  19. 放弃理想,未必能成就现实
  20. PHP+MySQL实现简单的登录注册

热门文章

  1. “数据结构+算法”视角的Asprova
  2. python教程(六)·字符串
  3. Git教程——入门基础
  4. ecshop修改后台登陆密码
  5. IntentService用法小结
  6. 编译安装httpd,并启动之
  7. 十个提升你Emacs生产力的高招
  8. (原创--网上办法经过改良)系统重装后,如何快速的回复oracle 10g(测试环境:windows server 2003 sp1+Oracle 10g)...
  9. 简单com编写流程及注册事项
  10. 更改vmware esx机器的ip