如何在 vb.net 中获取 OCX 的位置和文件名

How to get location and file name of OCX in vb.net

我可以很好地加载控件(伪代码):

Set o = CreateObject("DevsoftCustom.CommControl")

现在,我需要找到该 ocx 的文件和目录(这样我就可以读取 ocx 上的版本标记,并从该目录中的配置文件中读取)。

这是如何在 C# 和 vb.net 中完成的? (这个项目在vb.net)

Now, I need to find the file and directory for that ocx

假设您没有使用私有 COM 注册,此类信息在注册表中。

HKCR\CLSID\<SOME-GUID>\LocalServer="<path>"

...或者:

HKCR\<PROG-ID>\CLSID=<GUID>  // use this GUID in the example above

或者如果您不想使用注册表,您可以使用本机功能 CLSIDFromProgID()Tell me more...

这是 OLE/COM Object Viewer.

Microsoft Outlook 日期控件 的简单表示

You can use the OLE/COM Object Viewer to view a control's interfaces.

所以在你的情况下,根据程序 ID "DevsoftCustom.CommControl"

在注册表中查找 class ID

  1. HKCR 下,查找密钥 DevsoftCustom.CommControl
  2. 会有一个子键叫CLSID,注意默认值
  3. 打开 HKCR\CLSID\ < your-key-from-step-2 >
  4. 路径将位于名为 LocalServer32
  5. 的子项中

使用 Office 示例:

一旦了解了 COM 的工作原理,就很容易在 C# 中实现上述内容。

Isn't there a more direct way to ask the OS based on the object/control name?

据我所知,正如 Damien 提到的那样,COM(包括 OCX)的要点是您不关心某些东西在哪里,您只需要一个实例。

最接近的并行是在 GAC 中有一个 .NET 程序集,您希望在其中创建对象的实例,但又不想担心在同一台计算机上一遍又一遍地部署相同的程序集。当然,GAC 的用途远不止于此,因此比较就此结束。