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

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

У нас есть пара разных программ, созданных на разных языках, которые общаются друг с другом во время работы. Для достижения этой цели мы создали 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 в этом каталоге, но это не совсем правильно.

Спасибо

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]