为什么Regsvr32在一台机器上工作,而在另一台机器上却不能



当我在我的机器上将dll注册为管理员时,它工作正常:

Regsvr32 C:ameofdll.dll

但是,当我在另一台机器上运行它时,它会失败。 为什么?

错误代码 :可以使用这些方法之一查找错误代码。


Regsvr32.exe - 需要管理员权限:据我所知,自注册需要管理员权限,因为它注册每台机器的 DLL - 或者换句话说,在注册表的HKLM/HKCR部分中(HKCRHKLM的一部分的视图和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.dllMyApp.ocx以允许注册正常工作。

奇怪之处:可以看到许多其他问题。范围从licensing issuesCOM interoperability与.NET(regasm.exe(,来自奇怪security policies的干扰,security software interference- 防病毒等...到任意数量的other specific and rare factors.

警告:我看到自助注册在自我注册过程中执行非法操作并更改核心系统值 - 没有任何警告或解释。因此建议避免 尽可能在部署期间自行注册。

相关内容

最新更新