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

NSIS-在安装程序释放文件后运行函数,nsis,Nsis,我正在使用NSIS创建一个简单的安装程序,然后Joel使用NsisXML插件来更改config.xml文件中的一些内容 我创建了一个简单的函数,可以实现以下功能: Function ChangeConfig ${nsisXML->OpenXML} "$INSTDIR\configHexd.xml" ${nsisXML->CreateElement} "/config/config_hexd/paramlist" "param" "" ${nsisXML->SetElementA

我正在使用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文件而不尝试写入它,那么一切都会顺利进行。它只有在我尝试写入文件时才会崩溃

我想这是因为安装程序在复制文件之前试图写入文件,我想知道如何防止这种情况发生


谢谢

好吧,我解决了,而且比我想象的容易多了

首先,我的节点不是paramlist,而是paramList,这是主要问题

其次,正如@Anders所说,我不应该使用MUI_PAGE_CUSTOMFUNCTION_PRE来解决我的问题,在安装程序完成文件传输后,只需简单调用函数就足够了

因此,第1课:在责怪程序之前检查拼写错误

第2课:阅读文档以完全理解某事的作用


第3课:在大多数情况下,当你找到答案时,你会对解决问题的容易程度感到困惑。

你不应该使用MUI_PAGE_CUSTOMFUNCTION_PRE。为此,它是一个修改页面的回调。