如何在 C# 中获取已注册 COM 服务器的路径?

Posted

技术标签:

【中文标题】如何在 C# 中获取已注册 COM 服务器的路径?【英文标题】:How do I get the path of a registered COM server in C#? 【发布时间】:2016-07-22 09:03:53 【问题描述】:

有没有一种很好的方法可以在 C# 中以编程方式获取已注册 COM 服务器的路径?

我们有一个在 C# 项目中引用的进程外 COM 服务器(即 exe 文件);但是我们想强制我们从特定位置运行 COM 服务器,所以我们想在启动它之前检查注册的 exe 文件的路径。除了潜入注册表之外,还有什么好方法可以做到这一点?

【问题讨论】:

注册表的使用实际上已经记录在案,例如 LocalServer32 键:msdn.microsoft.com/en-us/library/windows/desktop/ms683844.aspx 不,没有好办法。当服务器本身可以简单地告诉您时,请不要依赖预言机。 【参考方案1】:

函数QueryPathOfRegTypeLib 就是这样做的。

但是,我确实注意到了一个奇怪的怪癖:

如果我首先按每个用户从一个路径注册:

c:\Path1\comserver.exe /regserverperuser

然后在系统级别的基础上从另一个路径注册:

c:\Path2\comserver.exe /regserver

那么QueryPathOfRegTypeLib返回的是c:\Path1\comserver.exe,其实是c:\Path2\comserver.exe,是加载类型库时启动的...

【讨论】:

以上是关于如何在 C# 中获取已注册 COM 服务器的路径?的主要内容,如果未能解决你的问题,请参考以下文章

在 c# 中,如何测试/获取/设置可能存在或不存在的注册表项?

利用C#访问注册表获取软件的安装路径

如何获取 Windows 中可用 COM 接口的列表

c#如何在winform中打开一个excel文档呢

电脑管家(像qq,360管家)是怎么获取到系统中安装的软件列表和补丁列表(漏洞,已安装,未安装)用C#如何实现

需要在注册表中找到已注册 com dll 的 clsid