2011-11-12 13 views
2

私はsandobxを作成するための特別な方法で使用します。AppDomainのアクセス許可を変更する方法は?

internal static class Helper 
{ 
    public static AppDomain CreateSandbox() 
    { 
     Contract.Ensures(Contract.Result<AppDomain>() != null); 

     var platform = Assembly.GetExecutingAssembly(); 
     var name = platform.FullName + ": Sandbox " + Guid.NewGuid(); 
     var setup = new AppDomainSetup { ApplicationBase = platform.Location }; 
     var permissions = new PermissionSet(PermissionState.None); 
     permissions.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, platform.Location)); 
     var sandbox = AppDomain.CreateDomain(name, null, setup, permissions); 

     Contract.Assume(sandbox != null); 

     return sandbox; 
    } 
} 

私が作成したサンドボックスを使用する場合、私はそれのパーミッションを変更したい:

sandbox = Security.Helper.CreateSandbox(); 
sandbox.SetupInformation.ApplicationBase = Path.GetDirectoryName(path); 
sandbox.PermissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, path)); 

をしかし、私はそれにアセンブリをロードするとき、私は例外を受け取ります:

" 'System.Security.Permissions.FileIOPermission、mscorlib、バージョン= 4.0.0.0、文化=中立、なPublicKeyToken = b77a5c561934e089' タイプの許可のための要求が失敗しました。"

AppDomainのアクセス許可を変更する方法作成後ですか?

+0

は完全な信頼で実行されているサンドボックスを作成するコードですか?または少なくともFileIOPermission自体がありますか? – JRoughan

+0

はい、実行中のサンドボックスを作成するコードは完全信頼です。 –

答えて

4

同類のAppDomainでは、許可されたアクセス許可セットはFullTrustと、ドメインの作成時に定義されたアクセス許可セットだけです。一度許可されると、許可セットはもう延長できません(AFAIK)。プラグインをサンドボックス化し、カスタムAppDomainの作成時に定義したPermissionSetに関連付け、よく使用されるセキュリティ保護されたクリティカルクラスライブラリを使用して高度な機能(高度なアクセス権が必要)を提供します。

も答えを参照してここにヒント: http://social.msdn.microsoft.com/Forums/en-US/clr/thread/23a9197e-3581-4a28-912d-968004488773

+1

GDNにヘルパーアセンブリをインストールしなくても、msdnフォーラムで与えた回答は使用できますか? – staafl

関連する問題