Com 在windows中启动进程时,是否可以选择要使用的清单?

Com 在windows中启动进程时,是否可以选择要使用的清单?,com,manifest,regfreecom,reg-free,Com,Manifest,Regfreecom,Reg Free,我试图提供一个COM对象,它可以用来替换我无法控制的可执行文件中的对象。我已经用所有相同的接口创建了这个COM对象的实现。我希望能够偶尔使用此替换,因此我不希望其注册替换原始对象 我可以通过修改可执行文件的清单,在我的dll中查找COM对象,而不是通过注册表查找到原始对象,从而使用reg free COM使可执行文件加载我的COM对象而不是原始对象 到目前为止还不错。但这样做需要修改可执行文件中的清单文件。我不希望此更改是永久性的,而且由于可执行文件通常安装在“程序文件”中,因此更改此文件也需要

我试图提供一个COM对象,它可以用来替换我无法控制的可执行文件中的对象。我已经用所有相同的接口创建了这个COM对象的实现。我希望能够偶尔使用此替换,因此我不希望其注册替换原始对象

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

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

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

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


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

我将在这里采用不同的路径,并使用
HKEY\U CURRENT\U USER\Software\Classes
重新创建原始COM DLL的注册表项,以指向您的备用DLL。此位置按用户操作,并优先于
HKEY\U CLASSES\U ROOT
。一个单独的启动器可以做到这一点,不需要管理员权限。发射器应在退出时删除这些键。

谢谢。我会这么做的,但由于变化的持续性,我有点犹豫。如果我的应用程序被终止、崩溃或计算机断电,则更改是永久性的,直到我的应用程序再次运行并可以重置它。或者我需要一个监控程序始终运行,以查看是否需要将其设置回原位。为了缓解意外崩溃的情况,您可以在替代DLL中编写检查代码,以查看应用程序是否正在调用它。如果不是,DLL本身可以清理键并将其所有COM方法委托给原始DLL。或者,它可能会显示一条消息,要求重新启动应用程序(在清理按键后),然后执行此操作。