gpt4 book ai didi

.net - 从 'Sandbox Environment' 中的 .Net 应用程序加载程序集

转载 作者:行者123 更新时间:2023-12-04 15:53:29 26 4
gpt4 key购买 nike

我是currently developing an application用户将在其中动态选择 dll,应用程序将执行该 dll 中的某些方法。 (如果您点击第一个链接,您会看到我正在使用 .Net Framework 开发一种 Robocode 游戏应用程序)。

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

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

例如,如果编写 dll 的用户不是仅使用接口(interface)中适用的方法(机器人用于行走和开火的方法等),而是调用将检索文件和甚至可能从硬盘中删除文件...当另一个用户将该 dll 加载到他的计算机时,这些方法将在他的计算机上调用,并且他的文件将被此恶意代码修改。

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

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

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

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

最佳答案

通常情况下,你可能只是生活在

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<Calculator>(AddInSecurityLevel.Internet);

参见 http://msdn.microsoft.com/en-us/library/bb355219.aspx了解详情。

关于.net - 从 'Sandbox Environment' 中的 .Net 应用程序加载程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/510071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com