Com 无法仅在一台计算机上注册ActiveX控件

Com 无法仅在一台计算机上注册ActiveX控件,com,activex,registry,Com,Activex,Registry,在两台不同的计算机上注册供应商提供的ActiveX控件时,我遇到了一个奇怪的问题。在一台计算机上,我可以使用regsvr32注册零件,然后在Access 2007表单中使用它,不会出现任何问题。在另一台计算机上,注册相同的DLL后,Access 2007或任何其他Office 2007程序都无法将其识别为有效的ActiveX部件 ActiveX部件包含在单个DLL中。我没有丢失其中一台计算机上的其他文件 我使用md5sum在两台计算机上交叉检查了DLL的确切版本。两个DLL文件完全相同 我使用

在两台不同的计算机上注册供应商提供的ActiveX控件时,我遇到了一个奇怪的问题。在一台计算机上,我可以使用regsvr32注册零件,然后在Access 2007表单中使用它,不会出现任何问题。在另一台计算机上,注册相同的DLL后,Access 2007或任何其他Office 2007程序都无法将其识别为有效的ActiveX部件

  • ActiveX部件包含在单个DLL中。我没有丢失其中一台计算机上的其他文件
  • 我使用md5sum在两台计算机上交叉检查了DLL的确切版本。两个DLL文件完全相同
  • 我使用Nirsoft ActiveX Helper实用程序交叉检查了注册零件时生成的所有注册表项。条目相同
  • 我检查了Access以确保该部件具有指向DLL的引用条目
  • 我检查了DLL的位置是否被指定为Access中的受信任位置

不幸的是,作为一名COM专家,我还不足以知道我是否忽略了一些重要的东西。如果您有任何其他想法,我们将不胜感激。

好的,完全是无中生有,但我们的组织中有一些计算机,它已经锁定得很紧了。当我们运行安装程序时,它们运行正常并注册ActiveX组件,但在第一次运行程序时,它必须是管理员。之后,普通用户可以运行程序。

您可以尝试使用简单的VBS脚本来验证是否可以创建控件

使用记事本(或类似工具)将以下内容另存为test.vbs,然后双击以运行它

set oTest = CreateObject("<YOUR PROGID HERE>")

MsgBox ("All Done Successfully")
set-oTest=CreateObject(“”)
MsgBox(“全部成功完成”)
您应该得到一个合理的描述错误或“全部成功完成”

这至少表明这是一个全系统的问题还是办公室特有的问题

如果你得到一个错误,它很可能指向实际的问题


另外,如果您没有收到错误,那么您可能有Office安装问题,可以通过重新安装来解决。

您是否查看了事件日志以获取有用信息?可能是Access尝试加载DLL时记录的错误?在有问题的计算机上,您是否检查过VBA是否已拧紧?因为您提到在工作计算机上,Access 2007可以访问activeX…听起来office 2007需要重新安装或修复…我倾向于怀疑VBA自动化…值得一试…您是否检查了注册表以验证控件的progid和clsid是否分别位于HKLM和HKLM\clsid中?不幸的是,事件日志中没有任何有用的内容。除了HKCR\CLSID和HKCR\TypeLib中的一个条目外,其他所有条目都有一个看起来正常的progid(我认为)。另外,使用Microsoft Sysinternals Process Manager监视MS Access注册表和文件I/O活动没有显示任何冒烟的迹象。我认为我一直以管理员身份运行该软件,但我不确定。说得好。