【发布时间】:2012-02-15 19:31:41
【问题描述】:
我有这个类,我在 AppDomain 中创建了它的实例,但没有权限但 SecurityPermissionFlag.Execute:
class IsolationEntryPoint : MarshalByRefObject
{
// main is the original AppDomain with all the permissions
public void Enter(AppDomain main)
{
// these work correctly
Console.WriteLine("Currently in: " + AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("Host: " + main.FriendlyName);
// the exception is thrown here
main.DoCallBack(this.MyCallBack);
}
public void MyCallBack()
{
Console.WriteLine("Currently in: " + AppDomain.CurrentDomain.FriendlyName);
}
}
奇怪的是,我在 DoCallback 行中得到 SecurityException:
请求类型的许可 'System.Security.Permissions.ReflectionPermission, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089' 失败了。
MSDN 说this 关于 AppDomain.DoCallBack 的权限要求:
ReflectionPermission 通过后期绑定的机制调用时,例如 作为 Type.InvokeMember。
调用未使用Type.InvokeMember 之类的内容,为什么会出现异常?
编辑:
为了清楚起见,这里是我用来创建带有隔离对象的 AppDomain 的代码:
[STAThread]
static void Main(string[] args)
{
var setup = new AppDomainSetup();
setup.ApplicationBase = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
var evidence = new Evidence();
var permissions = new PermissionSet(PermissionState.None);
permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
var domain = AppDomain.CreateDomain(
"isolationDomain",
evidence,
setup,
permissions);
var handle = Activator.CreateInstanceFrom(
domain, typeof(IsolationEntryPoint).Assembly.ManifestModule.FullyQualifiedName,
typeof(IsolationEntryPoint).FullName);
var instance = (IsolationEntryPoint)handle.Unwrap();
instance.Enter(AppDomain.CurrentDomain);
}
这两段代码是我的完整应用程序,没有别的(所以异常应该很容易重现)。
感谢您的帮助
【问题讨论】:
标签: c# .net remoting appdomain isolation