我目前正在开发一个应用程序,用户将动态选择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.
通常,你可能只是和你一起生活
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.