简短的

我有一个安装包(基于MSI),它试图注册一个dll文件用作Windows资源管理器栏(Internet Explorer工具栏)。

定制操作定义如下:

[SystemFolder]\regsvr32.exe /s "pathtodllhere"

错误
  • 在Windows XP 64位上,regsvr32自定义操作不会而不是起作用。

  • MSI日志的输出:



    到目前为止,我的测试/想法简要总结如下:
  • 自定义操作位于“InstallFinalize”部分中,因此仅在将文件拖放到硬盘驱动器后才运行。
  • Dll文件未被损坏,并且有效。
  • Regsvr32定制操作可以在以下环境下正常运行(和MSI安装):Windows 7 32位和Windows XP 32位。
  • Regsvr32 32位版本在64位安装期间执行(应如此)。
  • Regsvr32失败,错误代码为5,即ERROR_ACCESS_DENIED。

  • 解决方案和思考
  • 自注册-不使用regsvr32,并使用我的MSI安装程序手动放置注册表项。
  • 该dll是一个Delphi COM dll,它使用TRegistry组件进行自身注册。再说一次,我想不出为什么它不起作用的原因,因为它只是包装器,而只是一种想法。

  • 希望我在这里展示了我的研究成果,不要浪费任何人的时间!

    最佳答案

    最佳实践解决方案(如您所提到的)是从组件中提取注册表项,然后使用msi将它们写入注册表。

    背景

    Regsvr32需要管理员权限和提升权限确认才能在64位Windows 7下注册COM组件,但msiexec不知道为自定义操作请求提升权限。

    您可以通过使用“打开方式...”在组件上运行C:\Windows\SysWOW64\regsvr32.exe(这将失败)来测试此要求。而如果您创建用于注册的批处理文件,然后“以管理员身份运行”,则组件将成功注册。

    关于windows - MSI错误-regsvr32自定义操作失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8822223/

    10-10 18:14