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

时间:2018-02-28 18:33:02

标签: installation windows-installer installshield-2016

我们有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,infinite,LAAW_OPTION_WAIT | LAAW_OPTION_SHELLEXECUTE)

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

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

2 个答案:

答案 0 :(得分:0)

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

我使用延迟自定义操作通过regasm注册.dll,它运行正常。

答案 1 :(得分:0)

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

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