【问题标题】:Running a WPF by creating an AppDomain通过创建 AppDomain 运行 WPF
【发布时间】:2012-05-06 12:20:03
【问题描述】:

我想创建一个 AppDomain 并通过它运行一个外部 WPF 应用程序。 主要原因是安全性,因为我想控制外部 WPF 应用程序可以做什么。 具体来说,我想禁止使用任何非托管代码。

我已经运行了以下代码:

PermissionSet set = new PermissionSet(PermissionState.None);
set.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, PATH));
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
set.AddPermission(new UIPermission(PermissionState.Unrestricted));
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode));

Evidence ev = new Evidence();
AppDomain domain = AppDomain.CreateDomain("Test", ev, new AppDomainSetup() { ApplicationBase = PATH }, set);
domain.ExecuteAssembly(PATH);

而且效果很好。

当我删除权限集中的最后一行(即允许非托管代码运行)时,它停止工作。

如何禁止新的应用程序域运行非托管代码,但仍让 WPF 应用程序运行? (顺便说一句,WPF 应用程序只是一个 File->New WPF 应用程序,因此它不使用任何非托管代码)。

谢谢!

【问题讨论】:

  • 它以什么方式停止工作?有任何错误信息吗?
  • 我收到一条错误消息,说它无法加载 MainWindow.xaml

标签: .net wpf security unmanaged appdomain


【解决方案1】:

不幸的是,您需要 UnmagedCode 权限才能实例化 WPF 窗口。在后台,WPF 使用非托管代码访问 Windows API 以进行消息传递和窗口管理等操作。

来自 MSDN 窗口概述文档http://msdn.microsoft.com/en-us/library/ms748948.aspx

Window 需要 UnmanagedCode 安全权限才能被实例化。对于在本地机器上安装和启动的应用程序,这属于授予应用程序的权限集。

但是,这不属于授予使用 ClickOnce 从 Internet 或本地 Intranet 区域启动的应用程序的权限集。因此,用户将收到 ClickOnce 安全警告,并且需要将应用程序的权限集提升到完全信任。

如果您想限制 WPF 应用程序的功能,您可能想尝试在不同的用户名下运行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多