请问:是否有一种方法可以列举当前系统中的AppDomain?

penter 2004-06-25 04:17:48
见题,谢谢;
...全文
75 点赞 收藏 8
写回复
8 条回复
penter 2004年06月29日
楼上的朋友,谢谢你的参与;

《程序员》有一期的专题就是谈论“动态程序”,我想如果在程序不可能被停止,被重新
编译的情况下改变程序的执行行为,应该有这样的需求,也想在.NET下找到相应的解决方法;

http://www.blogbus.com/blogbus/blog/diary.php?diaryid=196144
这个例子就是在没有停掉程序的情况下改变了程序的执行;

我会做一个尝试,并把最终的结果发布出来,

回复 点赞
maotroy 2004年06月29日
我觉得,如果能够得到安全认证的话,那更稳妥的做法是通过接口来实现。如果希望破入程序运行时获取或设置被隔离的资源,本身就说明程序在安全机制上有欠缺,而你正是想利用这种欠缺去达成某种目的!!面向对象就是希望让你看到你想看到的,而隐藏你“不应该”关心的。
回复 点赞
maotroy 2004年06月28日
AppDomain 是介于 Process与Thread 之间的一种形态,System.Diagnostics.Process中有一些静态的方法可以取得Process的信息;System.Diagnostics.Process.GetProcesses() 将返回当前系统中运行的Process集合。
AppDomain机制本身的目的是为了隔离保护数据不被别的AppDomain访问,而实现跨AppDomain的数据访问本身就是件吃力不讨好的事情。用C++来实现比较底层的东西应该比.Net更为方便吧。
回复 点赞
penter 2004年06月28日
谢谢楼上的朋友;
我在MSDN看到如下一段话:

在任何情况下都不应创建 AppDomain 对象的可远程控制的包装。如果创建了,则可能会不经意地远程发布对该 AppDomain 的引用,这将会远程公开该 AppDomain 的 CreateInstance 方法(和其他方法),并严重损坏该 AppDomain 的任何代码访问安全性。连接到远程 AppDomain 的恶意客户端可能将能够访问 AppDomain 本身才能访问的资源。您不应为任何以下类型创建可远程控制的包装:扩展 MarshalByRefObject 的类型和实现恶意客户端可用来绕过安全系统的方法的类型。

这样来说,AppDomain可以把自己发布出去;至于发布出去是不是可以做我想做的事情,我会写一些代码来看看;

我觉得可能是.NET的API不全面的缘故吧,假如有权限,通过安全认证的某个程序的确希望列举当前系统中正在运行的全部AppDomain,是应该有一种机制来满足这种需求的;

回复 点赞
penter 2004年06月25日
谢谢楼上两位;
我看了MSDN,好象没有象WIN32下可以用来枚举当前系统中运行的Process的那种API;

如果可以得到AppDomain的引用,就可以在该域中用emit动态生成Assembly......

想做的事情,请看下面的连结:
http://www.blogbus.com/blogbus/blog/diary.php?diaryid=196144

不知道有人有没有兴趣?
回复 点赞
maotroy 2004年06月25日
AppDomain 之间不能通信,除非继承了MarshalByRefObject类,得到了也没什么意义吧,如果只是当前程序域的话用楼上的方法就可以了
回复 点赞
CMIC 2004年06月25日
AppDomain.CurrentDomain
回复 点赞
penter 2004年06月25日
或者说,根据已经知道的AppDomain.FriendlyName得到已有的 AppDomain的引用?
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告