如何使用.NET检查COM组件(EXE / DLL文件)是否已注册?

16

如何使用.NET检查COM组件(EXE/DLL文件)是否已注册?

3个回答

16

只需要在注册表中查找。HKEY_CLASSES_ROOT\yourcom.component。


这里是一个使用C#的例子:https://dev59.com/6VTTa4cB1Zd3GeqPqTq5#34099852 - C. Augusto Proiete

5
这要看情况。你的组件将被注册到Windows注册表中,因此您需要确定要查找哪个存储区。如果使用regasm安装组件,则很可能会使用HKCU,因为它将从用户的命令行运行。但是,如果您使用MSI,则MSI可能不使用regasm,并且如果以“所有用户=“1””或作为管理员的方式运行MSI,则可能直接将条目放入HKLM。另一方面,如果您将MSI作为PER USER(ALLUSERS =“”)或非特权帐户运行,则将使用HKCU。
HKCR是HKLM和HKCU的合并视图,因此您无法确定实际使用了哪个存储区,而且可能无法提供您想要的信息。MSDN HKEY_CLASSES_ROOT 如果您的COM组件是按用户注册的,那么它可能会因为不同用户运行安装而失败。因此,如果您想检查它是否被正确安装,您需要确定实际想要使用哪个键,或者HKCR是否可接受。对于最终用户测试,HKCR可能是最安全的测试方式,因为它将被每个人访问,并且(在.NET中)不会抛出安全异常。
另请参见此帖子:regasm和HKCU

1

你可以从Visual Studio的引用管理器中进行此操作。

  1. 转到“解决方案资源管理器”>“引用”
  2. 右键单击“引用”
  3. 选择“添加引用...”
  4. 从菜单中选择COM项目

这个工具的好处是你可以通过关键字更优雅地搜索对象,而不是通过注册表导航。请注意,你也可以看到在GAC中注册的非COM对象。


它并没有回答问题,问题是关于编程检查的。 - Roman R.
1
你知道,其他的答案从技术上讲也都不是程序化的。负评也没什么意义。 - Shanerk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接