Этот вопрос немного похож на этот, за исключением небольшого поворота:
Могу ли я изменить последовательность поиска параллельной сборки?
У нас есть пара разных программ, созданных на разных языках, которые общаются друг с другом во время работы. Для достижения этой цели мы создали 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 изучает:
Хотя мой COM-файл действительно находится внутри C: \ Program Files (x86) \ MyCompany \ MyApplication \ MyCom.dll
Чтобы подтвердить поведение, мы скопировали COM в тот же каталог, что и fgl.exe, и, как и ожидалось, он работает.
Поэтому я хотел бы иметь возможность добавить каталог поиска в мой контекст активации, чтобы он искал эту DLL в моем каталоге развертывания.
Это возможно ?
Если я не могу найти другое решение, мы в конечном итоге развернем наши COM в этом каталоге, но это не совсем правильно.
Спасибо
Задача ещё не решена.
Других решений пока нет …