MSI错误 - regsvr32自定义操作失败

时间:2012-01-11 15:47:31

标签: windows delphi installer windows-installer regsvr32

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

自定义操作定义如下:

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

错误

  • regsvr32自定义操作在Windows XP 64位上运行。

MSI日志的输出:

  

CustomAction SystemFolder_2返回实际的错误代码5.错误   1722.此Windows Installer程序包存在问题。作为设置的一部分运行的程序没有按预期完成。 Action SystemFolder_2,   location:C:\ Windows \ SysWOW64 \,命令:regsvr32.exe / s“C:\ Program   文件(x86)\ Test Install \ test.dll“

     

MSI(s)(10:F4):产品:测试安装 - 错误1722.有一个   此Windows Installer程序包的问题。一个程序作为一部分运行   设置未按预期完成。 Action SystemFolder_2,位置:   C:\ Windows \ SysWOW64 \,命令:regsvr32.exe / s“C:\ Program Files   (x86)\ Test Install \ test.dll“

迄今为止我的测试/想法的短暂停顿:

  • 自定义操作位于“InstallFinalize”部分,因此仅在文件被放入硬盘驱动器时才会运行。
  • Dll文件已损坏且有效。
  • Regsvr32自定义操作正常(和MSI安装):Windows 7 32位和Windows XP 32位。
  • Regsvr32 32位版本在64位安装期间执行(应该如此)。
  • Regsvr32失败,错误代码为5,即ERROR_ACCESS_DENIED。

解决方案和冥想

  1. 自行注册 - 不使用regsvr32并使用我的MSI安装程序手动放置注册表项。
  2. dll是一个Delphi COM dll,它使用TRegistry组件进行自我注册。再一次,我想不出为什么这不起作用的原因,因为它只是一个包装,而只是一个想法。
  3. 希望我在这里展示我的研究,不要浪费任何人的时间!

1 个答案:

答案 0 :(得分:3)

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

<强>背景

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

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