在 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基本上,您需要创建一个使用自定义PermissionSet
的AppDomain
...锁定.NET 应用程序有权执行的操作。
创建一个有不同的方法。
您可以使用现有代码组区域(Intranet、Internet、MyComputer 等)定义的预定义的,也可以创建自己的。
这可以通过编程方式完成,也可以通过caspol.exe
完成。
当您创建这个辅助AppDomain
时,它实际上与您的应用程序“存在”在同一个 Windows 进程中......NET 只是提供了一个“隔离”层,使每个 AppDomain 保持分离。如果您极度偏执并且不信任该隔离层,那么您可以创建一个新的 Windows 进程并在该进程中运行您的 DLL....虽然这可能有点远。
要限制 AppDomain
对 Windows 资源(文件、注册表等)的访问,您可以更改 Windows 安全主体,即让它在具有较低权限的不同 Windows 帐户下运行。
可能在这里切线...但是其他一些可能会有所帮助的事情...取决于您要实现的目标...
如果您想要尽量减少被人发现的敏感信息(例如,被某人翻阅记忆),请使用SecureString
。
如果您想防止您的任何“代码”或“数据”被分页到磁盘(进入页面文件),那么您可以使用自定义 CLR 主机,以便将其全部保存在物理内存中。
http://nonpagedclrhost.codeplex.com/【讨论】:
以上是关于在 C# 中的自定义 appdomain 中加载 dll的主要内容,如果未能解决你的问题,请参考以下文章