我实现了一个自己的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,但由于继续标记而将转换为成功
答案 0 :(得分:0)
这是MSI项目吗? I would not use self-registration,而应在相关属性页的属性页中的“在构建时启用COM提取”:
如果此提取操作不起作用,则您可能具有加载文件时不满足的依赖项。例如缺少资源dll或类似的东西。 “构建时COM提取”的提取过程将填充许多MSI特定的COM表,这些表将为您处理所有COM注册详细信息(包括回滚支持)。
InstallShield自我注册 :此外,您可以在Installshield中启用文件的自我注册,而根本不通过自定义操作代码运行。我认为它在每个文件的属性页中。