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"을 의미합니까? AppDomains는 C#의 일부가 아닌 .NET Framework의 일부입니다. –
가능한 복제본 [appdomain을 통한 파일 시스템 및 네트워크에 대한 플러그인 액세스 제한] (http://stackoverflow.com/questions/1357231/restrict-plugin-access-to-file-system-and-network-via-appdomain) – Gonzalo
그래, 난 의미. 닷넷, 난 그냥 C# 그들은 나에게 거의 동등한하는 데 사용되는 :) 중복 질문에 관해서는, 미안 내가 게시하기 전에 그 하나를 보지 못했습니다. 그게 거의 내가 적응할 수있을 수 있도록 내가 필요로하는 것. – Caerbanog