2011-02-09 58 views
2

我想使用免注册COM,这样我就不必注册我的COM组件了。但是,我希望能够将com DLL放在不在或不在客户端exe文件夹下的位置,例如.... \ lib中。我无法在服务器清单文件中执行此操作,因为它不允许相对路径或绝对路径。免注册COM - COM DLL相对于客户端EXE的位置

有谁知道这是否有办法?


更新: 我只找到相对路径在XP上运行。但是,我可以使用Activation Context API在Windows Server 2008上使用绝对路径,所以很酷。我现在的问题是,我的COM组件对托管数据库驱动程序具有静态依赖性,但目前没有找到它。从我读过的清单文件中,我希望我可以简单地将另一个元素添加到指向此dll的COM无reg清单中,因为它与COM dll位于相同的目录中,但我无法使其工作。所以,总之,我有一个exe文件在一个目录中,它使用Activation Context API来引用它找到并正确加载的另一个目录(不是exe目录的子目录)中的COM清单/ dll。但我也有一个托管的数据库驱动程序DLL在与COM DLL相同的目录中,我想知道如何使用清单文件来加载它 - 如果可能的话。

+0

只是添加到此 - 我也尝试使用激活上下文api以及。如上所述,我希望我的客户端加载与client.exe不在同一目录中的COM DLL。我试图通过设置激活上下文中的程序集目录来指向包含清单文件和COM DLL的目录。结果是清单文件被正确找到,但是当它试图加载随附的dll时,它会查找与client.exe相关的路径,而不是其找到清单的目录。我错过了什么吗? – HammerIp 2011-02-10 10:32:18

+0

相对路径可以工作,即您可以将dll放在`。\ External`文件夹中,与exe相关。只需在清单中使用```。 – wqw 2011-02-11 15:41:26

回答

3

我已经通过运行带有父目录的exe作为当前目录来实现此目的。 即与此文件夹结构

  • parentdir/
  • parentdir/MYAPP/
  • parentdir/somedependency/
与 “parentdir” 作为当前目录

然后,您可以运行exe文件 “。\ myapp \ myapp.exe”“ ”和myapp.exe.manifest可以包含对“某些依赖项”中的某些内容的引用,如

<file name=".\somedependency\somecomassembly.dll" /> 

这适用于Windows服务器