代码之家  ›  专栏  ›  技术社区  ›  Franjo Pintarić

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

  •  1
  • Franjo Pintarić  · 技术社区  · 6 年前

    我正在使用NSIS创建一个简单的安装程序,然后使用Joel提供的NsisXML插件来更改配置中的一些内容。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
    

    脚本编译进行得很顺利,我得到了设置。exe。唯一的问题是,安装程序在复制文件时会因“未知运行时错误”而崩溃。只有在我使用这个函数时才会发生这种情况,如果我不调用它,一切都会很顺利。此外,如果我只打开和关闭XML文件而不尝试写入它,那么一切都会很顺利。它只有在我尝试写入文件时才会崩溃。

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

    谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   Franjo Pintarić    6 年前

    好吧,我解决了,比我想象的要容易得多。

    首先,我的节点没有被调用 参数列表 但是 参数 L ist公司 ,这是主要问题。

    其次,正如@Anders所说,我不应该在我的问题上使用MUI\u PAGE\u CUSTOMFUNCTION\u PRE,一个简单的 呼叫 在安装程序完成文件转换后,函数的。

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

    第2课:阅读文档以充分理解某些东西的作用。

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