- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要获取正在运行的对象的特定实例(来自 C#)。可能有此应用程序的多个实例正在运行。不幸的是,此应用程序始终以完全相同的名称(例如,“!{DED89DB0-45B6-11CE-B307-0800363A1E02}”)在 ROT 中注册。我可以使用显示的技术遍历 ROT here并找到我的应用程序的唯一实例,但是当我在 IRunningObjectTable 实例上使用 GetObject 方法时,它总是返回注册的第一个对象。
有什么方法可以得到那个特定对象的引用吗?这么近,但又那么远......
最佳答案
这是一件相当复杂的事情,没有真正的解决方案。我们在一个项目中解决它的方法如下:
- 您需要在 C++ 中创建应用程序(.NET 级别太高),用您自己的方法覆盖 RegisterActiveObject 和 RevokeActiveObject,安装一个 Hook 。
- 您需要先启动应用程序,然后再启动您的应用程序。
- 当代码启动时,它将监听事件以在 ROT 中创建新对象
- 你的代码需要拦截那个(覆盖 RegisterActiveObject)
- 检查注册对象是否是您感兴趣的对象
- 如果是,那么您可以修改它的名称(例如在末尾添加 PID)并添加到 ROT
- 现在你有例如以下元素
!{DED89DB0-45B6-11CE-B307-0800363A1E02}
!{DED89DB0-45B6-11CE-B307-0800363A1E02}
!{DED89DB0-45B6-11CE-B307-0800363A1E02}_3365
!{DED89DB0-45B6-11CE-B307-0800363A1E02}_4564
关于c# - 当注册名称不唯一时,有什么方法可以从 ROT 获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082580/
我是一名优秀的程序员,十分优秀!