当前位置:  开发笔记 > 后端 > 正文

在"沙箱环境"中从.Net应用程序加载程序集

如何解决《在"沙箱环境"中从.Net应用程序加载程序集》经验,为你挑选了1个好方法。

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

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

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

例如,如果编程dll的用户,而不是仅使用适用于接口的方法(机器人用于行走和触发的方法等等),则调用将检索文件甚至删除的方法来自硬盘的文件...当另一个用户将该dll加载到他的计算机中时,这些方法将在他的电脑上调用,他的文件将被这个恶意代码修改.

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

关于如何开始这样做的任何想法?

这是一个关于如何加载这些dll并调用其方法的示例:

for (int i = 0; i < robotList.Count; i++)
{
    IRunnable o = robotList[i];
    new Thread(delegate()
    {
        o.run();    
    }).Start();
}

amazedsaint.. 7

通常,你可能只是和你一起生活

AppDomain newDomain = AppDomain.CreateDomain(name);
Assembly asm = newDomain.Load(System.IO.File.ReadAllBytes(name));

但有一点有趣的是,AppDomain.Load方法会将程序集加载到新的应用程序域以及当前域.

更优雅的解决方案是在3.5中使用System.AddIn命名空间.- http://msdn.microsoft.com/en-us/magazine/cc163476.aspx

然后,您可以使用AddinSecurityLevel来实际指定插件的信任级别

//Activate the selected AddInToken in a new
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate(AddInSecurityLevel.Internet);

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb355219.aspx.



1> amazedsaint..:

通常,你可能只是和你一起生活

AppDomain newDomain = AppDomain.CreateDomain(name);
Assembly asm = newDomain.Load(System.IO.File.ReadAllBytes(name));

但有一点有趣的是,AppDomain.Load方法会将程序集加载到新的应用程序域以及当前域.

更优雅的解决方案是在3.5中使用System.AddIn命名空间.- http://msdn.microsoft.com/en-us/magazine/cc163476.aspx

然后,您可以使用AddinSecurityLevel来实际指定插件的信任级别

//Activate the selected AddInToken in a new
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate(AddInSecurityLevel.Internet);

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb355219.aspx.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有