一个appdomain可以限制在一个目录吗?
Posted
技术标签:
【中文标题】一个appdomain可以限制在一个目录吗?【英文标题】:Can an appdomain be restricted to one directory? 【发布时间】:2010-05-19 22:35:27 【问题描述】:我正在开发一个插件主机。插件应该尽可能少地信任它们,但是我希望插件能够读取和写入文件。
能否将加载程序集的 AppDomain 限制为只能访问一个目录进行读写?
其他选项和方法也值得赞赏,例如将文件数据从主机流式传输到插件(读取)和从插件到主机(写入)的简单方法。
如果相关:我正在为插件使用 MAF 基础架构。 http://msdn.microsoft.com/en-us/library/bb384200.aspx
【问题讨论】:
“C# 中的应用程序域”是什么意思? AppDomain 是 .NET Framework 的一部分,而不是 C# 的一部分。 Restrict plugin access to file system and network via appdomain的可能重复 是的,我的意思是 .Net,我只是习惯了 c#,它们几乎等同于我 :) 至于重复的问题,抱歉,我在发布之前没有看到那个问题。它几乎是我需要的,所以我可以适应它。 【参考方案1】:namespace ConsoleApplication
#region Imports
using System;
using System.IO;
using System.Security;
using System.Security.Permissions;
#endregion
public class Plugin : MarshalByRefObject
public string TestRead(string path)
try
File.ReadAllBytes(path);
return "Done";
catch (SecurityException)
return "Access Denied";
public class Program
static void Main(string[] args)
var setup = new AppDomainSetup();
setup.ApplicationBase =
AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
var perm = new PermissionSet(PermissionState.None);
perm.AddPermission(
new SecurityPermission(
SecurityPermissionFlag.Execution));
perm.AddPermission(
new FileIOPermission(
FileIOPermissionAccess.Read, "c:\\public\\"));
var pluginDomain =
AppDomain.CreateDomain("PluginDomain", null, setup, perm);
var plugin =
pluginDomain.CreateInstanceAndUnwrap(
typeof(Plugin).Assembly.FullName,
typeof(Plugin).FullName) as Plugin;
Console.WriteLine(plugin.TestRead("c:\\public\\test.txt"));
Console.WriteLine(plugin.TestRead("c:\\secret\\test.txt"));
Console.ReadKey();
【讨论】:
以上是关于一个appdomain可以限制在一个目录吗?的主要内容,如果未能解决你的问题,请参考以下文章
当我加载的另一个 AppDomain 引发未处理的异常时,我可以隔离我当前的 AppDomain 以防被拆除吗?
从 App.Config 将程序集加载到 AppDomain