Search code examples
installationnsisuninstallation

NSIS - Disable "Uninstall" button if no component is selected


I have a NSIS script with two components to uninstall. If the user unchecks both components in the "Choose components" page, the Uninstall button is still active, and the uninstall process can continue without actually uninstalling anything. Is there any easy way to disable the "Uninstall" button if no component is selected? The code for selecting the uninstaller section is the following:

# Macro for selecting uninstaller sections
!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID
    Push $R0
    ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}"
    StrCmp $R0 1 0 next${UNSECTION_ID}
    !insertmacro SelectSection "${UNSECTION_ID}"
    GoTo done${UNSECTION_ID}
next${UNSECTION_ID}:
    !insertmacro UnselectSection "${UNSECTION_ID}"
done${UNSECTION_ID}:
    Pop $R0
!macroend

Thanks in advance!


Solution

  • UninstPage Components un.InitComponents
    UninstPage InstFiles
    
    Section "un.Foo" SID_FOO
    SectionEnd
    Section /o "un.Bar" SID_BAR
    SectionEnd
    
    !include LogicLib.nsh
    
    Function un.InitComponents
    ;!insertmacro SELECT_UNSECTION SECTION_NAME ...
    Call un.onSelChange ; Make sure the initial button state is correct
    FunctionEnd
    
    Function un.onSelChange
    GetDlgItem $1 $hwndParent 1
    ${If} ${SectionIsSelected} ${SID_FOO}
    ${OrIf} ${SectionIsSelected} ${SID_BAR}
        EnableWindow $1 1
    ${Else}
        EnableWindow $1 0
    ${EndIf}
    FunctionEnd