2014-09-09 4 views
1

제거 할 구성 요소가 두 개인 NSIS 스크립트가 있습니다. 사용자가 "구성 요소 선택"페이지에서 두 구성 요소의 선택을 취소하면 제거 단추가 계속 활성화되며 실제로 제거하지 않고도 제거 프로세스를 계속할 수 있습니다. 아무 구성 요소도 선택하지 않으면 "제거"버튼을 비활성화하는 쉬운 방법이 있습니까? 사전에NSIS - 구성 요소를 선택하지 않은 경우 "제거"버튼을 비활성화하십시오.

# 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 

감사 : 제거 섹션을 선택하는 코드는 다음입니다!

답변

2
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