Как мне получить ProgID COM-компонента из C #? - PullRequest
2 голосов
/ 09 июня 2009

У меня есть приложение, написанное на C #

Я хочу отобразить список компонентов COM в папке в системе с подробной информацией о компоненте, первоначально ProgID.

Есть ли способ опроса компонента из моего кода C #, чтобы узнать подробности во время выполнения.

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

Если у вас нет абсолютно никаких других деталей времени выполнения компонентов COM внутри DLL, вы можете прочитать и проанализировать ресурс реестра, встроенный в DLL. Это то, что используется при регистрации для регистрации ProgID и CLSID.

Если вы знаете некоторые подробности времени выполнения о компонентах COM (например, интерфейсах, которые реализуют эти компоненты), возможно, есть способ отследить его через реестр. (Хотя я не верю, что есть способ сделать это без использования метода грубой силы ниже.)

Затем, конечно, существует метод грубой силы - перечисление определенных деревьев в реестре и сопоставление путей к библиотекам DLL в записях сервера / обработчика.

1 голос
/ 17 ноября 2009

Если у вас есть доступ к некоторым интерфейсам в этом COM-объекте - вы можете сделать что-то вроде этого:

[DllImport("ole32.dll")]
        static extern int ProgIDFromCLSID([In] ref Guid clsid,
           [MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);

        //...

            Type t = someInterface.GetType();
            Guid tmpGuid = t.GUID;
            string sProgID;
            ProgIDFromCLSID(ref tmpGuid, out sProgID);
0 голосов
/ 16 июня 2009

Хм, может быть, вы должны использовать класс TypeLibConverter и работать с обычными Метаданные .NET Framework.

См. здесь

...