2010-05-19 7 views
6

플러그인 호스트를 개발 중입니다. 플러그인은 필요한만큼의 신뢰를 가져야하지만, 플러그인을 사용하여 파일을 읽고 쓸 수있는 가능성을 원합니다.appdomain을 하나의 디렉토리로 제한 할 수 있습니까?

어셈블리를로드 할 AppDomain을 읽기 및 쓰기 용으로 하나의 디렉터리에만 액세스 할 수 있습니까?

다른 옵션과 방법은 호스트에서 플러그인 (읽기) 및 플러그인에서 호스트 (쓰기)로 파일 데이터를 스트리밍하는 쉬운 방법과 같이 평가할 수 있습니다.

관련 항목 : 해당 플러그인에 MAF 인프라를 사용하고 있습니다. http://msdn.microsoft.com/en-us/library/bb384200.aspx

+0

"C#의 appdomain"을 의미합니까? AppDomains는 C#의 일부가 아닌 .NET Framework의 일부입니다. –

+0

가능한 복제본 [appdomain을 통한 파일 시스템 및 네트워크에 대한 플러그인 액세스 제한] (http://stackoverflow.com/questions/1357231/restrict-plugin-access-to-file-system-and-network-via-appdomain) – Gonzalo

+0

그래, 난 의미. 닷넷, 난 그냥 C# 그들은 나에게 거의 동등한하는 데 사용되는 :) 중복 질문에 관해서는, 미안 내가 게시하기 전에 그 하나를 보지 못했습니다. 그게 거의 내가 적응할 수있을 수 있도록 내가 필요로하는 것. – Caerbanog

답변

6
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(); 
     } 
    } 
} 
관련 문제