NSIS - 运行 安装程序释放文件后的函数
NSIS - Run a function after the installer released the files
我正在使用 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。唯一的问题是,安装程序在复制文件时崩溃并显示 'unknown runtime error'。这只会在我使用此功能时发生,如果我不调用它,一切都会顺利进行。如果我只是打开和关闭 XML 文件而不尝试写入它,那么一切都会顺利进行。它只会在我尝试写入文件时崩溃。
我认为这是因为安装程序在完成复制之前尝试写入文件,我想知道如何防止这种情况发生。
谢谢!
好的,我解决了,而且比我想象的要容易得多。
首先我的节点不叫paramlist而是叫paramList,这是主要问题。
其次,正如@Anders 所说,我不应该使用 MUI_PAGE_CUSTOMFUNCTION_PRE 来解决我的问题,在安装程序完成传输文件就够了。
因此,第 1 课:在指责程序之前检查错别字
第 2 课:阅读文档以充分理解某些功能的作用。
第 3 课:在大多数情况下,当您找到答案时,您会惊讶于解决问题的难易程度。
我正在使用 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。唯一的问题是,安装程序在复制文件时崩溃并显示 'unknown runtime error'。这只会在我使用此功能时发生,如果我不调用它,一切都会顺利进行。如果我只是打开和关闭 XML 文件而不尝试写入它,那么一切都会顺利进行。它只会在我尝试写入文件时崩溃。
我认为这是因为安装程序在完成复制之前尝试写入文件,我想知道如何防止这种情况发生。
谢谢!
好的,我解决了,而且比我想象的要容易得多。
首先我的节点不叫paramlist而是叫paramList,这是主要问题。
其次,正如@Anders 所说,我不应该使用 MUI_PAGE_CUSTOMFUNCTION_PRE 来解决我的问题,在安装程序完成传输文件就够了。
因此,第 1 课:在指责程序之前检查错别字
第 2 课:阅读文档以充分理解某些功能的作用。
第 3 课:在大多数情况下,当您找到答案时,您会惊讶于解决问题的难易程度。