Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在';沙箱环境';_.net_Assemblies_Sandbox - Fatal编程技术网

.net 在';沙箱环境';

.net 在';沙箱环境';,.net,assemblies,sandbox,.net,Assemblies,Sandbox,在这里,用户将动态选择dll,应用程序将执行该dll中的一些方法。(如果您遵循第一个链接,您将看到我正在使用.Net Framework开发一种游戏应用程序) 例如,当战斗开始时,执行dll中的run方法 由于将执行run方法中指定的任何内容,因此必须应用相当多的安全约束 例如,如果编写dll的用户,而不是只使用界面中适用的方法(机器人用来行走和开火的方法等),调用将检索文件甚至可能从硬盘中删除文件的方法…当另一个用户将dll加载到他的计算机中时,这些方法将在他的电脑上调用,他的文件将被此恶意代

在这里,用户将动态选择dll,应用程序将执行该dll中的一些方法。(如果您遵循第一个链接,您将看到我正在使用.Net Framework开发一种游戏应用程序)

例如,当战斗开始时,执行dll中的
run
方法

由于将执行run方法中指定的任何内容,因此必须应用相当多的安全约束

例如,如果编写dll的用户,而不是只使用界面中适用的方法(机器人用来行走和开火的方法等),调用将检索文件甚至可能从硬盘中删除文件的方法…当另一个用户将dll加载到他的计算机中时,这些方法将在他的电脑上调用,他的文件将被此恶意代码修改

因此,我需要以某种方式使该应用程序在沙盒环境中运行,这样无论调用什么方法,都不会影响打开dll的计算机硬盘

关于我应该如何开始做这件事有什么想法吗

下面是我如何加载这些DLL并调用其方法的示例:

for (int i = 0; i < robotList.Count; i++)
{
    IRunnable o = robotList[i];
    new Thread(delegate()
    {
        o.run();    
    }).Start();
}
for(int i=0;i
您希望做的基本上是在单独的应用程序域中运行程序集。查看MSDN上的这一页,了解一个良好的起点。实际上,这是一个非常东方的做法:


通常情况下,你可能只是和

AppDomain newDomain = AppDomain.CreateDomain(name);
Assembly asm = newDomain.Load(System.IO.File.ReadAllBytes(name));
但有一点很有趣,AppDomain.Load方法将程序集加载到新的应用程序域以及当前域

一个更优雅的解决方案是在3.5中使用System.AddIn命名空间

然后,您可以使用类似AddinSecurityLevel的

//Activate the selected AddInToken in a new
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Internet);
//以新的方式激活选定的AddInToken
//具有Internet信任级别的应用程序域。
Calculator CalcAddIn=已选择的Token.Activate(AddInSecurityLevel.Internet);
有关详细信息,请参阅