Как проверить, зарегистрирована ли com dll в C#
Я создал надстройку Office в VS 2008, C#, .NET 3.5 и VSTO. Он развертывается через ClickOnce. Форма конфигурации времени выполнения выполняет regsvr32 для регистрации " fooapi.dll " входит в проект, который не может быть зарегистрирован во время установки из-за ограничений ClickOnce. Есть ли какой-либо предпочтительный способ проверить и посмотреть, если "fooapi.dll " регистрируется во время выполнения в C#?
5 ответов
попробовать тип.GetTypeFromCLSID или тип.GetTypeFromProgID методы для быстрой проверки наличия com-интерфейса.
альтернативно, просто создайте экземпляр объекта и поймайте исключение, например
catch(COMException ex) {
if(ex.ErrorCode == -2147221164) {
// Retrieving the COM class factory for component with CLSID XXXX failed
}
}
обновление:
перегрузка кажется, единственный, который фактически возвращает null
если не удается создать экземпляр COM-объекта.
Если вы знаете идентификатор GUID DLL, вы можете проверить наличие раздела реестра в HKCU\SOFTWARE\Classes
.
проверить наличие HKEY_CLASSES_ROOT\CLSID\{your_CLSID}
и правильные значения под ним. Вы можете искать InprocServer32
и Codebase
только значения, но вы также можете выбрать более подробную проверку.
вы также можете просто создать экземпляр компонента. Однако, если и компонент, и клиент являются C# , и вы используете new
, CLR может быть в состоянии выяснить правильную сборку и загрузить ее с помощью COM. (Да, иногда это может быть умно: -)). Вы должен явно P / invoke to CoCreateInstance
Если у вас есть progID компонента в DLL, вы можете попробовать получить тип:
System.Type.GetTypeFromProgID(string progID, bool throwOnError)
Если вы System.Runtime.InteropServices.COMException
, это означает, что progID не зарегистрирован.
Я думаю, что самый простой способ-попытаться создать компонент, который живет в fooapi.файл DLL. Оберните код создания в блок try/catch и поймайте исключение, которое создается, если DLL не зарегистрирована должным образом. Это самый верный способ проверить правильность регистрации