无法通过“自定义操作”运行脚本功能

时间:2018-09-24 20:13:09

标签: installshield installscript

我实现了一个自己的installscript文件,该文件允许安装程序注册dll。我将此与自定义操作结合起来以实际运行我创建的功能。我必须制作此脚本,因为dll无法通过将属性设置为self register进行注册。因此,我坚持在自定义操作失败后如何解决此问题的方法,以便可以测试脚本。 下面是我的脚本:

#include "Ifx.h"

export prototype RegisterComponents(HWND);

function RegisterComponents(hMSI)

STRING sRunStr;

begin

sRunStr = WINSYSDIR ^ "regsvr32.exe";

LongPathToQuote(sRunStr, TRUE);

//change the directory to target directory
ChangeDirectory(TARGETDIR);

//register dll
if(LaunchAppAndWait(sRunStr, "/s " + 
"C:\NCRUniEmulatorService\NCRUniEmulatorSO.dll", 
WAIT)) < 0) then
MessageBox("NCRUniEmulatorSO.dll", SEVERE);
else
endif;

end;

以下是我的自定义操作:

FunctionName:RegisterComponents

退货处理:同步

脚本内执行:延迟执行

安装执行顺序:在发布产品之后

所有其他序列设置都设置为“不在序列中”。

日志文件

  

InstallShield 14:17:18:调用脚本函数RegisterComponents   InstallShield 14:17:18:无法运行脚本功能,错误   0x80020006 InstallShield 14:17:18:CallScriptFunctionFromMsiCA()结束,   结果0x643 CustomAction RegisterComponents返回实际错误   代码1603,但由于继续标记而将转换为成功

1 个答案:

答案 0 :(得分:0)

这是MSI项目吗? I would not use self-registration,而应在相关属性页的属性页中的“在构建时启用COM提取”:

COM Extract at build

如果此提取操作不起作用,则您可能具有加载文件时不满足的依赖项。例如缺少资源dll或类似的东西。 “构建时COM提取”的提取过程将填充许多MSI特定的COM表,这些表将为您处理所有COM注册详细信息(包括回滚支持)。

InstallShield自我注册 :此外,您可以在Installshield中启用文件的自我注册,而根本不通过自定义操作代码运行。我认为它在每个文件的属性页中。