Как проверить, зарегистрирован ли COM-компонент (EXE/DLL файл) или нет (с использованием .NET)?

Как проверить, зарегистрирован ли COM-компонент (EXE/DLL файл) или нет с помощью .NET?

Ответы

Ответ 1

Просто выполните поиск в реестре. HKEY_CLASSES_ROOT\yourcom.component.

Ответ 2

Это зависит. Ваш компонент будет зарегистрирован в реестре Windows, поэтому вам нужно выяснить, какой улей вы хотите посмотреть.

Если ваш компонент установлен с regasm, скорее всего, будет использоваться HKCU, поскольку он будет запущен из командной строки пользователя. Если, однако, вы используете MSI, MSI может не использовать regasm и может помещать записи непосредственно в HKLM, если вы запускаете MSI в режиме PER MACHINE (ALLUSERS = "1" ) или в качестве администратора. С другой стороны, если вы запускаете MSI как PER USER (ALLUSERS = "") или как непривилегированную учетную запись, она будет использовать HKCU.

HKCR объединяет представление HKLM и HKCU, поэтому вы не можете определить, какой улей был фактически использован, и это может не дать вам то, что вы хотите знать. MSDN HKEY_CLASSES_ROOT

Если ваш COM-компонент зарегистрирован PER USER, он может выйти из строя в зависимости от того, какой пользователь выполнил установку. Поэтому, если вы хотите проверить, была ли она установлена ​​ПРАВИЛЬНО, вам нужно выяснить, какой ключ вы действительно хотите использовать, или если HKCR является приемлемым. Для тестирования конечных пользователей HKCR может быть самым безопасным способом тестирования, поскольку он будет доступен всем и (в .NET) не будет бросать исключения безопасности.

Также см. этот пост: regasm и HKCU

Ответ 3

Из Visual Studio вы можете сделать это из диспетчера ссылок.

  • Перейдите в Обозреватель решений > Ссылки
  • Щелкните правой кнопкой мыши ссылку
  • Выберите Добавить ссылку...
  • Выберите пункт COM из меню

Самое приятное в этом инструменте - вы можете искать объекты по ключевому слову немного элегантнее, чем переходить через реестр. Обратите внимание, что вы также можете видеть объекты, не связанные с COM, зарегистрированные в GAC.