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

例如,在战斗开始时,执行从DLL run方法。

由于无论是在运行方法中指定将被执行,有相当多的具有要被施加安全约束的。

例如像,如果谁编程,而不是只使用适用从接口中的方法的dll,用户(方法,该机器人采用行走和消防等),调用将检索文件的方法和甚至从硬盘删除文件......而当另一个用户加载该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将所述组件装入到新的应用程序域,以及到当前域。

一个更好的解决方案是使用命名空间System.AddIn在3.5。 - 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 获得的信息。

其他提示

你在找什么做的基本上是运行在一个单独的应用程序域组件。看看MSDN上这个网页,一个很好的起点。这实际上是相当东做的事:

http://msdn.microsoft.com/ EN-US /库/ ms173139(VS.80)的.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top