当文件不存在时,NSIS回调函数会崩溃安装程序

时间:2010-01-22 12:44:23

标签: nsis

我坚持这个。 我在下标(.nsh)文件的底部有这个回调函数。 (如您所见,我正在使用LogicLib):

Function InstallFoo
MessageBox MB_OK "Within InstallFoo function"
${If} ${FileExists} "$EXEDIR\Modules\foo.zip" 
MessageBox MB_OK "foo.zip found, do install it!"
nsisunz::Unzip "$EXEDIR\Modules\foo.zip" "$INSTDIR\Foo"
${Else}
MessageBox MB_OK "No foo.zip found. Do nothing"
${EndIf}

MessageBox MB_OK "End reached"
FunctionEnd

当'foo.zip'存在时,一切都正如我所希望的那样,但是当它不存在时,安装程​​序崩溃,我真的无法理解为什么。

我希望它能够处理找不到'foo.zip'的时候,也就是什么都不做。现在发生的事情是安装程序崩溃了 “setup.exe - 应用程序错误,”some-address“处的指令引用”some-other-address“处的内存。内存无法”读取“。

我在脚本的各个部分中都有相同类型的代码,无论是否存在zip文件,它都能正常工作。它只是在这个回调函数中不起作用,所以我开始认为它与回调函数有关。

在'foo.zip文件不存在'中 - 我得到以下MessageBoxes:“在InstallFoo函数内”“没有找到foo.zip。什么都不做”“已达到结束”

然后是崩溃。我在调用回调的部分中也有一个MessageBox打印输出,也就是从回调函数返回后发生的第一件事,但它永远不会到达那里。 请注意,只要foo.zip存在,一切正常!

有没有人知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

在我看来,只要在回调函数中没有完成任务,我就会崩溃。

NSIS是否为回调函数分配了一些内存,如果它没有被使用,我们就会崩溃.. ??怪异。