我们使用清单文件来实现免注册 COM,正如我在 这另一个问题.

现在我们尝试将免注册 COM 与支持插件的应用程序一起使用. 。插件是 OCX 文件,可以在安装主应用程序后将其添加到主应用程序的文件夹中。

但是,这意味着主应用程序的清单文件需要由插件安装程序进行修补。这似乎是一件危险且容易出错的事情,尤其是在可以安装多个插件的情况下。

有没有办法以某种方式分割主应用程序的清单文件,以便每个插件可以安全地将其自己的部分添加为单独的文件?或者另一种安全的方式来修补清单文件?

如果相关:我们创建我们的安装程序 维克斯.

有帮助吗?

解决方案

我不建议修改应用程序的清单文件;这看起来相当脆弱,只有当它位于可写位置时才有效。

在进程启动时,应用程序的清单用于生成“激活上下文”,该“激活上下文”被推送为进程范围的激活上下文。但每个线程也有一个激活上下文堆栈,可以直接操作。当查找 COM 注册数据时,给定线程上的操作会查看堆栈上最顶层的上下文和进程范围的激活上下文。

建议任何时候插件代码需要调用 COM 时,都应在线程上激活特定于插件的清单。这可以通过以下两种方式之一轻松完成:

  1. 将特定于插件的清单作为 ID2 清单嵌入到插件中并使用宏进行编译 ISOLATION_AWARE_ENABLED 定义的。这基本上封装了常见的 Windows API,这些 API 需要清单中的上下文来自动激活和停用调用周围的正确激活上下文。

  2. 激活/停用插件所有入口点周围线程上的正确激活上下文。这是通过 激活上下文 API. 。通过激活最容易完成此操作 上下文管理对象.

其他提示

如果您正在使用.NET中,可以使用代码显示在这个答案以采取激活的护理上下文。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top