如何从C#获取COM组件的ProgID?

时间:2009-06-09 11:00:19

标签: c# reflection com interop

我有一个用C#编写的应用程序

我想在系统上的文件夹中显示COM组件列表,其中包含有关组件的详细信息,最初是ProgID。

有没有办法从我的C#代码中查询组件,以便在运行时查找详细信息。

3 个答案:

答案 0 :(得分:1)

如果DLL中没有其他COM组件的运行时详细信息,则可以读取并解析DLL中嵌入的注册表资源。注册期间使用的是注册ProgID和CLSID。

如果您确实知道有关COM组件的某些运行时详细信息(例如组件实现的接口),则可能有一种方法可以通过注册表回溯它。 (虽然我不相信如果不使用下面的蛮力方法就可以做到这一点。)

当然,有一种强制方法可以枚举注册表中的特定树,并匹配服务器/处理程序条目中DLL的路径。

答案 1 :(得分:1)

如果您可以访问该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);

答案 2 :(得分:0)

嗯, 也许你必须使用TypeLibConverter类并使用常规 .net框架元数据。

请参阅here