Dll 使用没有注册表的COM组件

Dll 使用没有注册表的COM组件,dll,com,shared-libraries,manifest,Dll,Com,Shared Libraries,Manifest,我有一个COM dll(比如Mydlib.dll)和一个应用程序(比如myapp.exe)。现在Mydlib.dll(即commonprogramfiles/…)的全局路径保存在注册表中。但是对于这个特殊的应用程序,我需要一个保存在不同位置的私有版本。实际上,它是相同的副本,但应用程序希望其私有副本独立于共享副本。我做了一些研究,写了这篇关于使用清单文件解决问题的伟大文章。 使用这个,我成功地制作了两个清单(myapp.exe.manifest和Mydlib.X.manifest)。使用此方法

我有一个COM dll(比如Mydlib.dll)和一个应用程序(比如myapp.exe)。现在Mydlib.dll(即commonprogramfiles/…)的全局路径保存在注册表中。但是对于这个特殊的应用程序,我需要一个保存在不同位置的私有版本。实际上,它是相同的副本,但应用程序希望其私有副本独立于共享副本。我做了一些研究,写了这篇关于使用清单文件解决问题的伟大文章。

使用这个,我成功地制作了两个清单(myapp.exe.manifest和Mydlib.X.manifest)。使用此方法,我可以将Mydlib.dll保存在myapp.exe根文件夹内的子文件夹中,并在Mydlib.X.manifest的file元素的name属性中指定路径。i、 e.
||file name=“/Mydlib.dll”| |
在这里之前一切正常

问题: 现在由于一些许可问题,我无法将这个Mydlib.dll保存在根文件夹中。所以我更改了Mydlib.X.manifest并将file元素改为
||文件名=../Mydlib.dll | |
我还尝试了绝对路径
||文件名=/Mydlib.dll||

以上两种路径在WindowsXP中都可以正常工作

但从win2003开始,在wards上,路径不能是绝对路径。相对路径必须是根文件夹的子文件夹的路径。因此,我无法在Windows 2003以后的版本中获得类似的行为。这在本文的故障排除部分已经提到

是否有任何变通方法或其他方法来实现相同的结果

请帮忙。 谢谢
-U

您参考的文章还讨论了激活上下文API

可以使用这种方法,而不仅仅是清单文件。 您可能会使用它指向非子文件夹。 目前还不清楚2003年的限制是否适用,我怀疑它们可能不适用。 我没有试过,但这是一个建议

这里还有一些相关信息:

谢谢,我认为通过使用激活上下文API解决了这个问题。实际上,我给出了激活上下文对象的清单文件路径,并将DLL保存在清单的子文件夹中。一个很好的代码参考:很高兴你解决了你的问题,你可能想写下你的解决方案并接受你自己的答案。这样,解决方案对下一个人来说就很清楚了:)