我使用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文件而不试图写入它,一切顺利。当我尝试写入文件时它只会崩溃。
我认为这是因为安装程序在完成复制之前尝试写入文件,我想知道如何防止这种情况。
谢谢!
答案 0 :(得分:1)
好的,我解决了它,这比我想象的要容易。
首先,我的节点不是名为 paramlist ,而是 param L ist ,这是主要问题。
其次,正如@Anders所说,我不应该使用MUI_PAGE_CUSTOMFUNCTION_PRE来解决我的问题,在安装程序完成之后,该函数的一个简单的调用就足够了。
所以,第1课:在指责程序之前检查拼写错误
第2课:阅读文档以完全理解某些内容的作用。
第3课:在大多数情况下,当你找到答案时,你会感到困惑,因为解决这个问题是多么容易。