NSIS: проверьте, выбран ли раздел в groupgroup - PullRequest
1 голос
/ 24 июня 2010

У меня есть скрипт NSIS с несколькими разделами и группой разделов.Это чисто для целей отображения, например:

SectionGroup /e "ERP Integration"
    Section /o "Exact" SEC_EXACT
        ; section stuff
    SectionEnd

    Section /o "Navision" SEC_NAV
        ; section stuff
    SectionEnd
SectionGroupEnd

Теперь я хочу проверить, выбран ли конкретный подраздел.Для этого у вас есть заголовок Sections.nsh с некоторыми изящными макросами, поэтому я попытался:

    !insertmacro SectionFlagIsSet ${SEC_NAV} ${SF_SELECTED} End${ProductName} ""
        StrCpy ${ConfigProductVar} "true"
        StrCpy ${ConfigGlobalVar} "true"
        nsislog::log "$INSTDIR\install.log" "${ProductName} is not yet installed and selected, call config"
    End${ProductName}:

Однако это возвращает true, если выбран один из подразделов группы.

Есть ли способ проверить, выбран ли определенный раздел в группе, без вмешательства других разделов в группе?

1 Ответ

2 голосов
/ 24 июня 2010

Код, который вы опубликовали, должен работать правильно для одного раздела внутри группы разделов. Единственная проблема, которую я вижу, может состоять в том, что код SectionFlagIsSet $ ​​{SEC_NAV} ... появляется до реальных разделов в вашем .nsi. Определения для индекса раздела (SEC_EXACT, SEC_NAV) не определены до тех пор, пока не будет обработана команда раздела, поэтому $ {SEC_NAV} не будет допустимым числом, SectionFlagIsSet, вероятно, обработает его как 0, и это ваша группа разделов.

Вам также следует переключиться на логическую библиотеку, чтобы код выглядел следующим образом:

${If} ${SectionIsSelected} ${SEC_NAV}
;....
${Else}
;....
${EndIf}
...