0

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

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

我们在一个网格环境中运行,该环境使用一个公共文件夹作为根来部署各种包(即 zip 文件)。多个应用程序希望从一个公共位置引用一个公共 COM Api(带有 DLL 清单)。然而,由于网格环境是沙盒环境,我们不能安装到 Windows SxS 目录,也不能带外(即不由网格部署)。

我是否希望从..\SomeCommonDir\COM.dllC:\Program Files\SomeCommonDir\COM.DLL 加载 COM.DLL

作为私人集会,一切正常。

4

1 回答 1

1

这应该可以使用激活上下文来实现。(我假设你对清单等没问题,因为听起来你可以让它以“标准”方式正常工作......)

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

这个 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);
于 2012-03-22T10:08:47.697 回答