У меня есть страница диагностики программного обеспечения, на которой я хотел бы перечислить информацию о версии файла для пары COM DLL. Страница работает под обычной ограниченной учетной записью ASP.Net (СЕТЕВАЯ СЛУЖБА).
Учитывая идентификаторы ProgID библиотеки COM, как лучше всего получить физический путь к файлу или иным образом получить доступ к версии файла №?
Обратите внимание, что загрузка его через Type.GetTypeFromProgID и использование объекта Assembly типа не сработает, поскольку возвращаемый объект Assembly является объектом mscorlib.
Путь установки может быть выбран пользователем, и его значение не гарантируется.





Один из способов приблизиться к этому - использовать функцию COM CLSIDFromProgID (Pinvoke.Net показывает, как вызвать ее из .Net здесь) для получения идентификатора CLSID, используйте GUID.ToString («B») для преобразования идентификатора CLSID в строку соответствующего формата. затем используйте его, чтобы копаться в реестре, чтобы найти, где зарегистрирован COM-сервер.
Путь будет HKEY_CLASSES_ROOT\CLSID\<YourCLSID>\InprocServer32, если COM-сервер является внутрипроцессным сервером (т.е. DLL, как вы ожидаете)
Обратите внимание, что путь к файлу в реестре не обязательно является полным путем.
Путь обычно указывается полностью, однако код установщика должен записать его в реестр. Я столкнулся с кодом регистрации COM DLL, который ожидает, что DLL будет установлена в каталог в PATH. Это вызывает огорчение, когда устанавливающий пользователь отличается от пользователя-потребителя!
Кажется, это работает, спасибо! Знаете ли вы, что путь, скорее всего, не является полностью определенным путем?