COM бок о бок сборки с использованием DLL из другого каталога? - PullRequest
0 голосов
/ 25 января 2012

Я почти уверен, что ответ отрицательный, но на всякий случай:

Для автономного exe-файла с соответствующим манифестом SxS можно ли ссылаться на библиотеки DLL DLL, используя относительный путь, или загружать их изкаталог, который не является текущим каталогом?

Мы работаем с сеткой environemnt, которая развертывает различные пакеты (например, zip-файлы), используя общую папку в качестве корневой.Несколько приложений хотели бы ссылаться на общий COM Api (с манифестами DLL) из общего расположения.Однако, поскольку среда сетки находится в «песочнице», мы не можем установить ее в каталог Windows SxS, и мы также не можем сделать это вне полосы (то есть не развернуто сеткой).

Есть ли у меня надежда наговоря, загрузить COM.DLL из .. \ SomeCommonDir \ COM.dll или C: \ Program Files \ SomeCommonDir \ COM.DLL ?

Все отлично работает какчастное собрание.

1 Ответ

1 голос
/ 22 марта 2012

Это должно быть возможно с использованием контекстов активации.(Я предполагаю, что у вас все в порядке с манифестом и т. Д., Поскольку это звучит так, как будто вы можете заставить его работать нормально "стандартным" способом ...)

Есть "хардкорный" способ делать вещи здесь , или вы можете использовать объект Microsoft.Windows.ActCtx.Они оба позволяют вам вручную / программно установить местоположение манифеста client для контекста активации;клиентский манифест должен находиться в той же папке, что и манифест сборки и сборка.

Этот вопрос SO может быть вам полезен.А вот фрагмент одного из способов сделать это ...

// 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);
...