我很确定答案是否定的,但以防万一:
对于具有适当SxS清单的独立exe,是否可以使用相对路径引用COM DLL或从不是当前目录的目录加载它们?
我们在网格环境中运行,使用公共文件夹作为根部署各种软件包(即zip文件)。有几个应用程序想从公共位置引用一个常见的COM Api(带有DLL清单)。但是,由于网格环境是沙盒,我们无法安装到Windows SxS目录,我们也无法在带外进行(即未由网格部署)。
我是否有希望从 .. \ SomeCommonDir \ COM.dll 或 C:\ Program Files \ SomeCommonDir \ COM.DLL 加载COM.DLL?
作为私人集会,一切都很好。
答案 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);