使用来自另一个目录的dll的COM并排程序集?

时间:2012-01-25 14:28:19

标签: com assemblies shared sxs activation-context-api

我很确定答案是否定的,但以防万一:

对于具有适当SxS清单的独立exe,是否可以使用相对路径引用COM DLL或从不是当前目录的目录加载它们?

我们在网格环境中运行,使用公共文件夹作为根部署各种软件包(即zip文件)。有几个应用程序想从公共位置引用一个常见的COM Api(带有DLL清单)。但是,由于网格环境是沙盒,我们无法安装到Windows SxS目录,我们也无法在带外进行(即未由网格部署)。

我是否有希望从 .. \ SomeCommonDir \ COM.dll C:\ Program Files \ SomeCommonDir \ COM.DLL 加载COM.DLL?

作为私人集会,一切都很好。

1 个答案:

答案 0 :(得分:1)

这应该可以使用激活上下文。 (我假设您可以使用清单等,因为听起来您可以让它以'标准'方式正常工作......)

有'硬核'做事方式here,或者您可以使用Microsoft.Windows.ActCtx对象。这些都允许您手动/编程设置激活上下文的客户端清单的位置;客户端清单 必须与程序集清单和程序集位于同一文件夹中。

This SO question可能对您有用。这里有一种方法可以做到这一点......

// Create an activation context
Type actCtxType = System.Type.GetTypeFromProgID("Microsoft.Windows.ActCtx");
dynamic actCtx = System.Activator.CreateInstance(actCtxType);
actCtx.Manifest = @"Path\To\COMClient.manifest";

// Create the object you want, using the activation context
dynamic obj = actCtx.CreateObject("COMTestService.COMTestObject");

// Now use it!
var question = obj.GetQuestionFromAnswer(42);