RegAsm.exe 无法通过 installshield 2016 注册 Dll

Posted

技术标签:

【中文标题】RegAsm.exe 无法通过 installshield 2016 注册 Dll【英文标题】:RegAsm.exe unable to register Dll through installshield 2016 【发布时间】:2018-02-28 18:33:01 【问题描述】:

我们有 installshield 2016,在其中我们正在运行安装程序脚本。该脚本是通过自定义操作调用的。

所以我们按照下面提到的命令来注册“mydll.dll”, C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /codebase mydll.dll 当通过具有管理权限的命令提示符手动运行时,上述命令运行良好。但使用 installshield 脚本自定义操作创建的安装程序失败。

要运行命令,我们使用 LaunchApplicationAndWait() 和 LaunchApplication() 函数作为 strcmd = "cmd.exe 的路径" + "cmd.exe" strcmdopt = "regasm.exe 的路径" + "regasm.exe" + /codebase + dll 的路径和名称

ret = LaunchApplication(strcmd, strcmdopt, windir, sw_normal, 无限, LAAW_OPTION_WAIT | LAAW_OPTION_SHELLEXECUTE)

类似地 ret = LaunchApplicationAndWait(strcmd ,strcmdopt,LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN)

我的问题是为什么两个命令在通过 installshield 自定义操作脚本运行时都不起作用

【问题讨论】:

含糊不清,没有像样的错误消息。开始做应该做的事情,red circle。 installshield 2016 没有显示错误信息 【参考方案1】:

dll 是否随安装一起分发?如果是这样,调用脚本时文件是否存在于 installdir (或任何地方)中?可能会添加一些用于调试目的的消息框,以查看是否满足此条件。

我使用延迟自定义操作通过 regasm 注册 .dll,它工作得很好。

【讨论】:

【参考方案2】:

您不应该在安装过程中调用 Regasm。您应该将 DLL 作为密钥文件放在它自己的组件中,并设置 COM Interop = True 属性。这将导致 InstallShield 在构建期间执行 regasm /regfile 并获取输出并将其动态创作到注册表表中。在安装过程中,MSI 将简单地复制文件并应用注册表项,然后您就完成了。

注意:在 regasm /regfile 期间不会调用每个 MSDN doco 自定义函数,因此如果您在班级内进行任何奇怪的自我注册,您需要将其创作到安装程序中。

【讨论】:

以上是关于RegAsm.exe 无法通过 installshield 2016 注册 Dll的主要内容,如果未能解决你的问题,请参考以下文章

'RegAsm.exe' 不是内部或外部命令

regasm 无法定位输入程序集

来自VB6的.NET对象而不使用regasm.exe?

如何从 Visual Studio 命令提示符以外的命令行运行 regasm.exe?

Inno 安装 RegAsm.exe 错误

如何在没有 RegAsm.exe 的情况下注册类型库