Найти путь к COM DLL из сборки Com Interop - PullRequest
2 голосов
/ 11 мая 2009

Я пытаюсь написать оболочку вокруг устаревшего COM-объекта и установить оболочку в GAC. Цель состоит в том, чтобы автоматизировать настройку конкретной информации о конфигурации, необходимой компоненту, и создать общий строго типизированный интерфейс для всех моих приложений.

Мое решение до сих пор состоит в том, чтобы сохранить файл конфигурации XML в том же каталоге, что и исходная COM DLL, и загрузить конфигурацию в конструктор класса. К сожалению, я не смог найти местоположение зарегистрированного COM dll ...

Как получить полный путь к файлу COM dll, на который ссылается dll COM-объекта interop?

Ответы [ 4 ]

2 голосов
/ 12 мая 2009

Как только вы создали объект с соответствующего COM-сервера, его DLL должна быть загружена. Предполагая, что базовый COM-сервер реализован в «mycomserver.dll», вы можете использовать P / Invoke и вызвать GetModuleHandle («mycomserver.dll») - который дает вам путь к DLL.

2 голосов
/ 12 мая 2009

Предположительно, вы можете получить значения GuidAttribute или CoClassAttribute из DLL взаимодействия, которые сопоставляются со значениями CLSID и IID вашей COM DLL. Затем вы можете найти соответствующий путь к DLL в реестре.

1 голос
/ 05 декабря 2015

Если вы знаете CLSID COM-библиотеки DLL, вы можете проверить, есть ли ключ с этим CLSID на HKEY_CLASSES_ROOT\CLSID\{CLSID-of-your-COM-component} или HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{CLSID-of-your-COM-component} (Wow6432Node => 32-битный COM, зарегистрированный на 64-битной машине)

Если ключ есть, это означает, что компонент COM зарегистрирован. Затем посмотрите значение по умолчанию внутри вложенной клавиши InprocServer32

, например

  • HKEY_CLASSES_ROOT\CLSID\{12345678-9012-3456-7890-123456789012}\InprocServer32
  • HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{12345678-9012-3456-7890-123456789012}\InprocServer32

Если поможет, вот справочный пример того, как открыть эти ключи с помощью C # (вам просто нужно проверить значение в InprocServer32): Как проверить, зарегистрировано COM dll или нет в C #

0 голосов
/ 19 сентября 2016

Просто отразите класс AddIn.

var t = typeof(ThisAddIn);
var path = t.Assembly.CodeBase;
...