0

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

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

要运行命令,我们使用 LaunchApplicationAndWait() 和 LaunchApplication() 函数作为 strcmd = "path to cmd.exe" + "cmd.exe" strcmdopt = "path to regasm.exe" + "regasm.exe " + /codebase + path 和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 自定义操作脚本运行时都不起作用

4

2 回答 2

0

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

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

于 2018-03-01T16:05:15.227 回答
0

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

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

于 2018-03-01T12:30:31.523 回答