使用没有注册表的COM组件

时间:2012-03-27 14:25:44

标签: dll com shared-libraries manifest

我有一个COM dll(比如Mydlib.dll)和一个应用程序(比如myapp.exe)。现在Mydlib.dll(commonprogramfiles / ...)的全局路径保存在注册表中。但对于这个特定的应用程序,我需要一个保存在不同位置的私有版本。实际上它是相同的副本,但应用程序希望其私有副本独立于共享副本。我做了一些研究,并着手使用清单文件来解决这个问题。 http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic10

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

问题: 现在由于一些许可问题,我无法将此Mydlib.dll保留在根文件夹中。所以我改变了Mydlib.X.manifest并将文件元素改为了   ||文件名= .. // Mydlib.dll ||
我也试过绝对路径
  ||文件名= /Mydlib.dll ||

上述两种路径在WindowsXP中都能正常工作。

但是从win2003开始并且在病房路径上不能成为一条绝对的道路。相对路径必须是根文件夹的子文件夹。因此,我无法在Windows 2003以上获得类似的行为。本文的故障排除部分已经提到了这一点。

是否有任何解决方法或另一种方法可以达到相同的效果。

请帮助。 谢谢 -U

1 个答案:

答案 0 :(得分:1)

您引用的文章还讨论了 Activation Context API

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

此处还有一些相关信息: http://www.pcreview.co.uk/forums/question-regarding-activation-context-api-lpassemblydirectory-use-registration-free-com-t2656777.html