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();
}
}
}
你是什麼意思,「在C#中的應用程序域」? AppDomain是.NET Framework的一部分,不屬於C#的一部分。的[限制到經由應用程序域文件系統和網絡訪問插件] – 2010-05-19 22:44:49
可能重複(http://stackoverflow.com/questions/1357231/restrict-plugin-access-to-file-system-and-network-via-appdomain) – Gonzalo 2010-05-19 22:51:13
是的,我的意思的.Net,我只是習慣了C#,他們幾乎等同於我:) 至於重複的問題,對不起,我沒能看到我發佈的前一個。它幾乎是我需要的,所以我可能會適應它。 – Caerbanog 2010-05-19 22:57:44