Reg-free COM - расположение COM dll относительно клиента exe
Я хочу использовать reg-free com, чтобы мне не приходилось регистрировать свой устаревший компонент com. Тем не менее, я хотел бы иметь возможность поместить com в папку, которая не находится в или ниже каталога клиентского exe, например....\lib. Я не могу сделать это в файле манифеста сервера, поскольку он не позволяет относительные или абсолютные пути.
Кто-нибудь знает, есть ли способ обойти это?
ОБНОВЛЕНИЕ: я нашел только относительные пути для работы на XP. Тем не менее, я могу использовать абсолютные пути в Windows Server 2008 с помощью API-интерфейса активации, так что это круто. Моя проблема сейчас в том, что мой COM-компонент имеет статическую зависимость от драйвера управляемой базы данных, но в настоящее время он не находит его. Из того, что я читал о файлах манифеста, я надеялся, что смогу просто добавить еще один элемент в COM-рег-манифест, указывающий на эту dll, так как она находится в том же каталоге, что и COM dll, но я не могу заставить его работать. Итак, в итоге, у меня есть exe-файл в одном каталоге, который использует API-интерфейс Activation Context для ссылки на COM-манифест /dll в другом каталоге (который не является подкаталогом каталога exe), который он находит и загружает правильно. Но у меня также есть управляемый dll-драйвер базы данных в том же каталоге, что и COM-dll, и я хочу знать, как я могу загрузить его, используя файлы манифеста - если это возможно.
1 ответ
Я добился этого, запустив exe с родительским каталогом в качестве текущего каталога. т.е. с этой структурой папок
- parentdir /
- parentdir / MyApp /
- parentdir / somedependency /
Затем, используя "parentdir" в качестве текущего каталога, вы можете запустить ваш exe-файл как ". \ Myapp \ myapp.exe", а myapp.exe.manifest может содержать ссылку на что-то в "somedependency" как
<file name=".\somedependency\somecomassembly.dll" />
Это работает на Windows Server