我有一个用C#编写的应用程序
我想在系统上的文件夹中显示COM组件列表,其中包含有关组件的详细信息,最初是ProgID。
有没有办法从我的C#代码中查询组件,以便在运行时查找详细信息。
答案 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