Программно определить, установлена ​​ли библиотека COM (.DLL)

Есть ли в С# программный способ определить, установлена ​​​​ли конкретная DLL COM? Или это вопрос сканирования реестра для classId?


person dthrasher    schedule 02.04.2009    source источник


Ответы (2)


Что я обычно делал (и сделал бы, если бы мне это снова понадобилось), так это попытался создать экземпляр объекта класса, который, как вы знаете, находится в библиотеке COM - либо по ProgID, либо по GUID - и проверил на наличие ошибки.

person peSHIr    schedule 02.04.2009
comment
Должен быть более надежным, чем сканирование реестра, а также обнаружение неправильной установки. Однако это зависит от того, дорого ли обходится загрузка DLL или создание объекта. - person Pontus Gagge; 02.04.2009
comment
Верно. Вероятно, лучше всего попробовать использовать подходящий класс из библиотеки. И я предполагаю, что нет необходимости проверять, установлена ​​​​ли библиотека COM, если вы не планируете делать хоть что-то с библиотекой, поэтому ее загрузка для проверки установки обычно не проблема... - person peSHIr; 02.04.2009

Попробуйте создать его и обработайте ошибку, если нет.

В Win32 CoCreateInstance вернет REGDB_E_CLASSNOTREG, если он не установлен (включая IIRC, если он зарегистрирован, но реализующая его dll/exe затем удаляется).

В .NET сгенерированная сборка COM-взаимодействия выдаст некоторую ошибку (необходимо проверить это, у вас нет удобного кода для проверки того, какой тип исключения). Примечание. если сборка взаимодействия отсутствует, это будет рассматриваться как отсутствующая сборка, что может привести к ошибке загрузки приложения.

person Richard    schedule 02.04.2009