4

我正在尝试提供一个 COM 对象,该对象可用作我无法控制的可执行文件中的对象的替代品。我用所有相同的接口创建了这个 COM 对象的实现。我希望只能偶尔使用此替换,因此我不希望它的注册替换原始对象。

通过修改可执行文件的清单以在我的 dll 中查找 com 对象而不是通过注册表查找原始对象,我可以让可执行文件加载我的 COM 对象而不是使用无注册 COM 的原始对象。

到目前为止,一切都很好。但是这样做需要修改可执行文件中的清单文件。我不希望此更改是永久性的,并且由于可执行文件通常安装在“程序文件”中,因此还需要管理员权限才能更改此文件。

理想情况下,我想要的是保持原始可执行文件不变。然后,当需要时,我创建的单独启动程序将使用重定向到我的 com 对象的清单加载请求的可执行文件,而不是可执行文件中的原始清单文件。

这样的事情可能吗?或者也许是一种更好的方式来做我想做的事情?

注意:我可能无法在我具有写入权限的位置更改清单并制作可执行文件的副本,因为我事先不知道该可执行文件的所有依赖项将是什么(它可能需要来自同一目录,或来自子目录的数据文件)。我可以将修改后的可执行文件的工作目录设置为原始可执行文件的目录,但如果可执行文件根据其文件位置执行任何操作,它将中断。

4

1 回答 1

4

我将在这里采取不同的路线,并使用HKEY_CURRENT_USER\Software\Classes重新创建原始 COM DLL 的注册表项以指向您的替代 DLL。此位置按用户执行,并优先于HKEY_CLASSES_ROOT. 一个单独的启动器可以做到这一点,不需要管理员权限。启动器应在退出时删除这些键。

于 2013-09-08T15:17:26.180 回答