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

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