在 C# 中的自定义 appdomain 中加载 dll

Posted

技术标签:

【中文标题】在 C# 中的自定义 appdomain 中加载 dll【英文标题】:Load dll in custom appdomain in c# 【发布时间】:2013-07-29 09:25:35 【问题描述】:

我想在我的 c# 应用程序中创建沙盒模式。我需要在我的自定义或用户定义的应用程序域中加载一个 dll,然后从中执行一个方法。

我需要确保应用程序无法访问任何系统资源(硬盘等)。它应该在自己的记忆中生存和死亡。

谢谢

【问题讨论】:

你可以用这个-***.com/questions/6578170/… 我相信它会涉及很多代码。对于加载DLL的部分,可以使用Reflection,搜索动态加载DLL和执行方法。对于安全部分,您​​可以检查 SecurityModel for .NET 4.0 esp。主机可以限制自己访问任何其他资源。关于 AppDomain ,您可以创建和共享资源。 【参考方案1】:

请参阅这篇文章。

http://msdn.microsoft.com/en-us/library/bb763046.aspx

基本上,您需要创建一个使用自定义PermissionSetAppDomain...锁定.NET 应用程序有权执行的操作。

创建一个有不同的方法。

您可以使用现有代码组区域(Int​​ranet、Internet、MyComputer 等)定义的预定义的,也可以创建自己的。

这可以通过编程方式完成,也可以通过caspol.exe 完成。

http://www.codeproject.com/Articles/5724/Understanding-NET-Code-Access-Security

当您创建这个辅助AppDomain 时,它实际上与您的应用程序“存在”在同一个 Windows 进程中......NET 只是提供了一个“隔离”层,使每个 AppDomain 保持分离。如果您极度偏执并且不信任该隔离层,那么您可以创建一个新的 Windows 进程并在该进程中运行您的 DLL....虽然这可能有点远。

http://msdn.microsoft.com/en-us/library/2bh4z9hs.aspx

要限制 AppDomain 对 Windows 资源(文件、注册表等)的访问,您可以更改 Windows 安全主体,即让它在具有较低权限的不同 Windows 帐户下运行。

App Domain Level Impersonation

可能在这里切线...但是其他一些可能会有所帮助的事情...取决于您要实现的目标...

如果您想要尽量减少被人发现的敏感信息(例如,被某人翻阅记忆),请使用SecureString

.NET Secure Memory Structures

如果您想防止您的任何“代码”或“数据”被分页到磁盘(进入页面文件),那么您可以使用自定义 CLR 主机,以便将其全部保存在物理内存中。

http://nonpagedclrhost.codeplex.com/

【讨论】:

以上是关于在 C# 中的自定义 appdomain 中加载 dll的主要内容,如果未能解决你的问题,请参考以下文章

无法在新的 appDomain 中加载程序集

C#、MAF、单独 AppDomain 中的未处理异常管理

无法在 appDomain 中加载程序集

在 AppDomain 问题中加载具有依赖项的程序集

在沙盒 Appdomain 中加载程序集 - SecurityException

在新的 appdomain 中加载 C 模块失败