为什么Regsvr32可在一台计算机上运行但不能在另一台计算机上运行

时间:2018-09-25 15:50:04

标签: wix windows-installer installshield regsvr32 advanced-installer

当我在自己的计算机上将dll注册为管理员时,它运行良好:

Regsvr32 C:\ nameofdll.dll

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

1 个答案:

答案 0 :(得分:1)

  

错误代码 Error codes can be looked up using one of these methods


Regsvr32.exe-必需的管理员权限 :据我所知,自我注册需要管理员权限,因为它会按机器或其他方式注册DLL。注册表的 HKLM / HKCR 部分中的单词( HKCR 是对 HKLM 的一部分,以及 HKCU 部分的合并-换句话说,它是“ 紧急视图”来自 HKCU HKLM )。现在,我看到this answer似乎表明每个用户都有注册COM服务器的方法?它使用this method对我的测试OCX文件不起作用。我没有尝试the custom registration EXE from codeproject

MSI-每用户COM注册 :另一方面,Windows Installer能够为每用户安装COM服务器,以进行按用户安装的安装。由于许多原因(可维护性,升级,修补,各种限制),每个用户的设置都很糟糕,但这是另外一回事了。如果您enable Installshield's COM Extract On Build as I showed in another answer,则将COM数据添加到MSI中,以确保可以按用户注册COM服务器-如果按用户安装了安装程序,或者如果按安装了安装了计算机,每台机器。 这是使用Windows Installer注册COM文件的标准方法

位数 :可能还有其他问题原因,例如,提到的COM服务器的“位数”。我遇到过很少的x64 COM服务器,但是例如使用WiX时它们存在问题。据我所知,WiX 3.11版本不支持用于提取的x64 COM服务器。 Installshield中可能存在类似的问题-我不知道。

Support Page:在64位版本的Windows操作系统上,有 Regsv32.exe 文件的两个版本:

  • 64位版本为 %systemroot%\System32\regsvr32.exe
  • 32位版本为 %systemroot%\SysWoW64\regsvr32.exe

缺少依赖项 :如果缺少相关文件的依赖项,自注册也会失败。您可以使用诸如依赖项遍历器之类的工具进行检查,也可以使用procmon或any number of scanner tools进行监视(快速浏览一下)。请注意,COM服务器可能还缺少“语言dll”。例如:MyApp-English.dll。这样的文件应该位于主COM服务器文件MyApp.dllMyApp.ocx的旁边,以使注册正常工作。

可能性 :还可以看到许多其他问题。 NET(regasm.exe)的范围从licensing issuesCOM interoperability到奇怪的security policiessecurity software interference的干扰-反病毒等...到任意数量的{{1 }}。

  

警告 :我已经看到自我注册会在自我注册过程中执行非法行为并更改核心系统的值,而没有任何警告或解释。因此,推荐给avoid self-registration during deployment whenever possible