当我在我的机器上将dll注册为管理员时,它工作正常:
Regsvr32 C:ameofdll.dll
但是,当我在另一台机器上运行它时,它会失败。 为什么?
错误代码 :可以使用这些方法之一查找错误代码。
Regsvr32.exe
- 需要管理员权限:据我所知,自注册需要管理员权限,因为它注册每台机器的 DLL - 或者换句话说,在注册表的HKLM
/HKCR
部分中(HKCR
是HKLM
的一部分的视图和HKCU
部分的合并 - 换句话说,它是两个HKCU
的">紧急视图">和HKLM
(。现在我看到这个答案,似乎表明有办法为每个用户注册COM服务器?它不适用于使用此方法的测试 OCX 文件。我没有尝试从代码项目中自定义注册 EXE。
MSI - 每用户 COM 注册:另一方面,Windows 安装程序能够为每个用户安装 COM 服务器,用于安装每用户的安装程序。由于多种原因(可维护性、升级、修补、各种限制(,每用户设置很糟糕,但那是另一回事了。如果启用 Installshield 的 COM在生成时提取,如我在另一个答案中所示,COM 数据将添加到您的 MSI 中,以确保可以按用户注册 COM 服务器 - 如果安装程序是按用户安装的,或者如果安装程序是按计算机安装的。这是使用 Windows 安装程序注册 COM 文件的标准方法。
位数 :可能存在其他问题原因,例如提到的COM服务器的"位数"。我遇到的x64 COM服务器很少,但是例如使用WiX处理它们有问题。据我所知,WiX 3.11版本不支持x64 COM服务器进行提取。类似的问题可能存在 Installshield - 我不知道。
支持页面:在 64 位版本的 Windows 操作系统上,有两个版本的Regsv32.exe
文件:
- 64 位版本
%systemroot%System32regsvr32.exe
- 32 位版本
%systemroot%SysWoW64regsvr32.exe
缺少依赖项:如果相关文件缺少依赖项,则自注册也可能失败。您可以使用诸如依赖 walker 之类的工具来检查,也可以使用 procmon 或任何数量的扫描程序工具进行监视(快速浏览(。请注意,您也可能缺少 COM 服务器的"语言 dll"。例如:MyApp-English.dll
.此类文件应位于主 COM 服务器文件旁边,MyApp.dll
或MyApp.ocx
以允许注册正常工作。
奇怪之处:可以看到许多其他问题。范围从licensing issues
,COM interoperability
与.NET(regasm.exe(,来自奇怪security policies
的干扰,security software interference
- 防病毒等...到任意数量的other specific and rare factors
.
警告:我看到自助注册在自我注册过程中执行非法操作并更改核心系统值 - 没有任何警告或解释。因此建议避免 尽可能在部署期间自行注册。