【问题标题】:NSIS -- Read and execute section mention in a setup.ini fileNSIS——读取并执行 setup.ini 文件中提及的部分
【发布时间】:2020-05-15 08:26:50
【问题描述】:

我是使用 NSIS 来创建安装程序的新手。 我需要以下帮助

setup.ini 的结构: ; section titles [setup] sec0=my first section sec1=my second section sec2=my third section

Nsis 脚本结构 ;Sections Section 'sec0' ; ... SectionEnd Section 'sec1' ; ... SectionEnd Section 'sec2' ; ... SectionEnd 在这里我正在寻找,如果我没有在 setup.ini 文件中包含“sec1=my second section”,那么安装程序应该跳过这个而不安装。意味着安装程序应该首先阅读 setup.ini,然后只安装那里提到的部分。 请告诉我,我该如何实现。

【问题讨论】:

    标签: installation nsis


    【解决方案1】:
    !include Sections.nsh
    !include LogicLib.nsh
    
    Section 'sec0'
    SectionEnd
    
    Section 'sec1' SID_1
    SectionEnd
    
    Section 'sec2'
    SectionEnd
    
    !macro SetSectionFromAnswer inient sid
    ReadIniStr $0 "$exedir\Setup.ini" "setup" "${inient}"
    ${If} $0 == "" 
     !insertmacro UnselectSection ${sid} 
    ${EndIf} 
    !macroend
    
    Function .onInit
    !insertmacro SetSectionFromAnswer "sid1"  ${SID_1}
    FunctionEnd
    

    当使用这样的答案文件时,我建议不要检查条目是否不存在,而应检查它是否为!= "0"。这样,即使 .ini 不存在,安装程序也会正常运行。

    【讨论】:

    • 嗨安德斯,我在我的脚本中尝试了这个..但出现错误。那个“函数.onInit”已经存在。因为我已经定义了“.onInit”。如何使用多个 .onInit 函数?还有这个 sid_1, ${sid}, ${SID_1} 在做什么。我的要求是,如果我没有在 Setup.ini 文件中定义部分名称,安装程序应该跳过该部分并且不应该安装。
    • 只有一个 init 函数,但您可以将我的行添加到您现有的函数中。 “sid1”是要在 ini 文件中查找的名称,SID_1 是 NSIS 数字段 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多