我已经设置了一个小例子,我将程序集加载到一个没有任何权限的新AppDomain中。这样工作正常,程序集无法访问文件系统,也无法监听套接字。
但是我想要阻止另一件事:线程创建。为什么?理论上,这个程序集可以创建一个线程,创建更多线程并充斥我的记忆。
我想到了(在我看来)最好的方法:限制AppDomain的内存。这可能吗?如果没有,我该怎么做才能避免创建线程?
使用此代码创建线程
Thread t = new Thread(this.DoWork);
t.Start();
这个AppDomain的代码
PermissionSet set = new PermissionSet(PermissionState.None);
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
set.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read |
FileIOPermissionAccess.PathDiscovery,
this.path));
AppDomainSetup info = new AppDomainSetup { ApplicationBase = this.path };
this.domain = AppDomain.CreateDomain("Sandbox", null, info, set, null);
(好吧,我允许访问我想要加载程序集的文件夹中的文件系统,这只是因为StrongName fullTrustAssembly = typeof(SecureInstance).Assembly.Evidence.GetHostEvidence<StrongName>();
对我来说也不起作用。
答案 0 :(得分:2)
似乎对此没有简单的答案。您可以做的是使用.NET Profiling API来尝试监视AppDomain中的内存使用情况。你可以在这里找到更多相关内容,但是你需要进行一些挖掘:http://msdn.microsoft.com/en-us/library/bb384493.aspx
无论如何,运行任何你想要在具有较低优先级的单独进程中运行的东西不是更好,所以如果它与内存分配完全不同,它不会影响你的进程,操作系统会杀死它并且它不影响你的主要过程吗?