WPF Browser Application(XBAP)程序利用GAC提升权限的方法

来源:互联网 发布:windows无法访问u盘 编辑:程序博客网 时间:2024/05/19 19:14
        WPF Browser Application(XBAP)程序由于运行在Internet Explorer安全沙箱中,因此只能进行被认为是安全的操作,在微软目前实现的WPF Sandbox v1中,在Internet安全区域(Partial Trust)中不能进行的操作主要包括以下内容:
  • 新窗口和对话框
  • XAML序列化(使用XamlWriter.Save)
  • 保存文件对话框
  • 本地文件系统(非隔离存储区域)
  • 注册表访问
  • Windows Communication Foundation服务
  • Bitmap Effects
        如果将XBAP用于实际的RIA(Rich Internet Application),我觉得受限于WPF sandbox会给开发带来不便,尤其是上述列出的前两点(对话框和序列化),相信很多人会与我有同感。关于提升XBAP程序的执行权限的方法主要有两种解决思路:(参见http://scorbs.com/2007/01/10/xbap-trust-levels/)
        (1)在客户机器安装一个APTCA( AllowPartiallyTrustedCallersAttribute)程序集到GAC(Global Assembly Cache),由于GAC程序集具有FullTrust权限,因此可通过此程序集代理执行XBAP程序中需要超出PartialTrust权限的操作;
       (2)在客户机器上安装一证书到用户的“受信任的发行者”存储区,然后用此证书对XBAP程序集进行签名。

       今天就讲讲(1)中的方法如何实际操作,事实上这种方法应用在很多场合(例如ASP.NET应用中),对.NET FRAMEWORK安全机制很熟悉的程序员应该早就很清楚了,不过对于像我这样的WPF和.NET FRAMEWORK菜鸟来说,还是费了一番劲才搞清楚到底该怎么做,以下就是详细的步骤。

一、创建GAC程序集

        使用Visual Studio 2005(或Orcas)创建一个类库项目,然后修改项目的属性文件AssemblyInfo.cs文件,只需加上以下两句:
           
using System.Security;

[assembly: AllowPartiallyTrustedCallers]

       然后将需要提升权限的操作在GAC程序集中实现,作为公共的方法被其他程序集调用,例如:

using System.Windows.Markup;


         
/// <summary>
        
/// XAML序列化对象。
        
/// </summary>
        
/// <param name="o">待序列化对象。</param>
        
/// <returns>序列化后的结果字符串。</returns>

        public static string XamlSave( object o )
        
{
            NamedPermissionSet pset 
= new NamedPermissionSet("FullTrust");
            pset.Assert();
            
string s = XamlWriter.Save(o);
            CodeAccessPermission.RevertAssert();
            
return s;
        }

         注意:此GAC程序集一定要使用证书进行签名(因为GAC中必须是强命名程序集),这使用Visual Studio很容易完成,就不多说了。

二、创建XBAP程序集

        使用Visual Studio 2005(或Orcas)创建一个WPF Browser Application,然后将上述创建的的GAC程序集添加到引用中,注意一定要将“复制到本地”属性置为False。然后就可以调用GAC中的公共方法,例如上述的XamlSave来完成需要提升权限的操作。完成之后可将此程序集发布到Web服务器上。

三、创建GAC程序集的安装程序

       使用Visual Studio 2005(或Orcas)创建一个安装项目,在“目标计算机上的文件系统”上点右键会出现“添加特殊文件夹”菜单,然后选择“Global Assembly Cache文件夹”,然后在此文件夹上点击右键选择添加“项目输出”,设定为第一步创建的GAC程序集的主输出即可,然后编译即可生成安装程序。完成之后可将此程序发布到Web服务器上供用户端下载安装。

       用户在通过Internet Explorer浏览XBAP应用之前,需要先下载GAC程序集安装程序并运行,以便将APTCA程序集安装到GAC程序集,然后运行XBAP应用即可。

   
       
原创粉丝点击