Изменение / добавление последовательности поиска параллельной сборки

Этот вопрос немного похож на этот, за исключением небольшого поворота: могу ли я изменить последовательность поиска параллельных сборок?

У нас есть пара разных программ, созданных на разных языках, которые общаются друг с другом во время работы. Для достижения этой цели мы создали COM-объекты.NET, которые загружаем с помощью активации COM без регистрации. Это хорошо работает. Некоторые из используемых нами языков не могут загружать COM, поэтому мы создали C++ Wrapper DLL, которая использует ACTCTX для активации COM из их встроенных манифестов. Также работает хорошо.

Но теперь у нас есть случай, когда наш C++ Wrapper загружается кодом, который запускается приложением, которое не принадлежит нам (назовем это временем выполнения), которое находится где-то, а наше приложение находится где-то еще. Мы предпочли бы развернуть наши COM-объекты в том же месте, где развернуто приложение, а не рядом с приложением времени выполнения.

Не то чтобы это важно, поскольку концепция остается прежней, но бегун - Genero FourJ (fgl.exe), а код, который вызывает нашу оболочку C++, находится в файлах.42m. Программа запуска (fgl.exe) устанавливается вместе с Genero, по умолчанию она находится в Program Files\FourJs, а наши приложения находятся в другом каталоге с именем нашей компании, а именно: Program Files\MyCompany.

Это похоже на то, что вы получите с Java. Время выполнения в одном месте, приложение в другом месте.

Таким образом, в нашем случае наш.42m правильно загружает C++ Wrapper, оболочки активируют COM (расположенный в том же каталоге, что и наш.42m и оболочка), но как только мы пытаемся создать экземпляр объекта, мы получаем файл "80070002" не найдена ошибка.

Я прочитал Последовательность поиска сборки и заметил описанное поведение с помощью Process Monitor.

Итак, что происходит, так как в конечном итоге это fgl.exe, который запускается, загрузчик Windows Side-Side-Side изучает:

  1. C: \ Program Files (x86) \ FourJs \ fgl \ gen2.50 \ bin \ MyCom.dll
  2. C: \ Program Files (x86) \ FourJs \ fgl \ gen2.50 \ bin \ MyCom.dll \ MyCom.dll

Хотя мой COM-файл действительно находится внутри C:\Program Files(x86)\MyCompany\MyApplication\MyCom.dll

Чтобы подтвердить поведение, мы скопировали COM в тот же каталог, что и fgl.exe, и, как и ожидалось, он работает.

Поэтому я хотел бы иметь возможность добавить каталог поиска в мой контекст активации, чтобы он искал эту DLL в моем каталоге развертывания. Это возможно? Если я не могу найти другое решение, мы в конечном итоге развернем наши COM в этом каталоге, но это не совсем правильно.

Спасибо

0 ответов

Другие вопросы по тегам