我没有使用微软的MEF,我有理由不这样做.我会留下它.
问题在于,当加载插件时,无论它们对主程序有多么“盲目”,它都是表单/类/等.它仍然可以访问System.Windows.Forms.Application,因此可以访问我的应用程序及其当前运行的表单/方法/控件/等.
我不想要这个.有没有办法限制插件对主应用程序的访问?
编辑:有关该插件的更多信息
我们(我的老板和我)目前正在讨论插件需要做什么.他们显然都需要添加功能,但我们最初决定让每个插件访问当前运行的表单,以便它可以直接向表单添加控件和事件.这是基于这样的假设:只有我们开发人员才会编写它们.
现在我们正在考虑第三方插件的可能性,显然,原始设计与开放式门上的“请勿进入”标志具有相同的安全性,周围没有人.
或者万圣节时挂在一碗个人吃喝玩乐上的“Take One”标志.
解决方法 这样做的一种方法是将您的插件托管在自己的AppDomain中.您可以将这些AppDomain配置为具有有限的安全性,以防止它们访问主AppDomain中的资源.这确实使事情变得复杂,但会给你带来的沙子拳击.从AppDomain托管中获得的另一个好处是,如果您希望刷新插件,可以加载和卸载这些域,此外,您可以保护主AppDomain免受“子”域中的崩溃.
更新
看到你的更新后重新开始.如果您的插件必须能够直接访问UI元素,那么您的插件的功能将无法提供帮助,例如:访问表单以添加控件.您将无法通过AppDomain边界直接访问表单,也无法在一个AppDomain中生成控件,然后将它们编组到另一个AppDomain中.
您仍然可以考虑在另一个AppDomain中托管插件,但是您需要考虑某种代理机制,以便可以代表插件为表单添加控件等 *** 作,而不是让插件直接访问表单.例如,您可以传入一个表单构建器对象,该对象具有Addbutton等方法.然后,代理可以代表主域中的插件执行这些 *** 作.通过这种方式,您可以为插件提供有限的API以及所需的事件.
这种方法绝不是微不足道的,但是一旦掌握了基础知识,它就不会太复杂.
更新2
自从在当天推出自己的AppDomins插件框架以来,事情已经发生了变化.自3.5版插件以来,现在已经支持.Net框架:
MAF – Managed Addin Framework / System.Addin
它支持插件的AppDomain隔离模式,并具有插件加载器等.无需自己滚动.
总结以上是内存溢出为你收集整理的有没有办法阻止C#插件访问程序中的主C#应用程序?全部内容,希望文章能够帮你解决有没有办法阻止C#插件访问程序中的主C#应用程序?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)