NSIS - 安装程序释放文件后运行一个函数

时间:2018-03-12 14:52:21

标签: nsis

我使用NSIS创建一个简单的安装程序,然后使用Joel的NsisXML插件来更改config.xml文件中的一些内容。

我创建了一个简单的功能:

Function ChangeConfig
${nsisXML->OpenXML} "$INSTDIR\configHexd.xml"
${nsisXML->CreateElement} "/config/config_hexd/paramlist" "param" ""
${nsisXML->SetElementAttr} "/config/config_hexd/paramlist/param[10]" "name" "logPath"
${nsisXML->SetElementAttr} "/config[0]/config_hexd/paramlist/param[10]" "value" "$INSTDIR/logs"
${nsisXML->CloseXML}
FunctionEnd

我打电话给他:

; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\run.exe"
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
!define MUI_PAGE_CUSTOMFUNCTION_PRE ChangeConfig
!insertmacro MUI_PAGE_FINISH

脚本编译顺利,我得到了setup.exe。唯一的问题是,设置崩溃时出现了未知的运行时错误。什么时候复制文件。这只发生在我使用此功能时,如果我不称其为一切正常。如果我只是打开并关闭XML文件而不试图写入它,一切顺利。当我尝试写入文件时它只会崩溃。

我认为这是因为安装程序在完成复制之前尝试写入文件,我想知道如何防止这种情况。

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,我解决了它,这比我想象的要容易。

首先,我的节点不是名为 paramlist ,而是 param L ist ,这是主要问题。

其次,正如@Anders所说,我不应该使用MUI_PAGE_CUSTOMFUNCTION_PRE来解决我的问题,在安装程序完成之后,该函数的一个简单的调用就足够了。

所以,第1课:在指责程序之前检查拼写错误

第2课:阅读文档以完全理解某些内容的作用。

第3课:在大多数情况下,当你找到答案时,你会感到困惑,因为解决这个问题是多么容易。