Reg-free COM - расположение COM dll относительно клиента exe - PullRequest
2 голосов
/ 09 февраля 2011

Я хочу использовать reg-free com, чтобы мне не приходилось регистрировать свой устаревший com-компонент. Тем не менее, я хотел бы иметь возможность поместить com в папку, которая не находится в или ниже каталога клиентского exe, например. .... \ Lib. Я не могу сделать это в файле манифеста сервера, поскольку он не позволяет относительные или абсолютные пути.

Кто-нибудь знает, есть ли способ обойти это?


UPDATE: Я нашел только относительные пути для работы на XP. Однако я могу использовать абсолютные пути в Windows Server 2008 с помощью API-интерфейса активации, так что это круто. Моя проблема сейчас в том, что мой COM-компонент имеет статическую зависимость от драйвера управляемой базы данных, но в настоящее время он не находит его. Из того, что я прочитал о файлах манифеста, я надеялся, что смогу просто добавить еще один элемент в COM-рег-манифест, указывающий на эту dll, поскольку она находится в том же каталоге, что и COM dll, но я не могу заставить его работать. Итак, в итоге, у меня есть exe-файл в одном каталоге, который использует API-интерфейс активации для ссылки на манифест COM / dll в другом каталоге (который не является подкаталогом каталога exe), который он находит и загружает правильно. Но у меня также есть управляемый dll-драйвер базы данных в том же каталоге, что и COM-dll, и я хочу знать, как я могу загрузить его, используя файлы манифеста - если это возможно.

1 Ответ

4 голосов
/ 02 мая 2012

Я добился этого, запустив exe с родительским каталогом в качестве текущего каталога.то есть с этой структурой папок

  • parentdir /
  • parentdir / myapp /
  • parentdir / somedependency /

Затем с "parentdir"в качестве текущего каталога вы можете запустить ваш exe-файл как «. \ myapp \ myapp.exe», а myapp.exe.manifest может содержать ссылку на что-то в «somedependency» как

<file name=".\somedependency\somecomassembly.dll" />

Это работает в WindowsСервер

...