2011-12-09 2 views
4

지금까지 레지스트리 키를 읽고 디렉토리가 존재하는지 테스트하여 소프트웨어의 이전 설치를 감지하는 방법을 알아 냈습니다. (둘 다 NSIS 도움말 파일에 잘 설명되어 있습니다). 이제 응용 프로그램이 이전에 설치되어있는 경우 다른 디렉토리를 지정하도록 사용자에게 강요하고 싶습니다. (이전 버전에서는 저장된 데이터를 포함한 모든 것을 제거하기 때문에 강제로 제거하지 마십시오.NSIS - 사용자가 다른 디렉토리를 선택하도록 강요하십시오.

내가 볼 수있는 한, 라이센스, 설치 폴더, 진행률 표시기 등에 대해 미리 정의 된 템플릿이 MUI2.nsh에 있습니다. 설치 프로그램 흐름의이 단계에서 유효성 검사를 어떻게 추가합니까?

업데이트 - Tried Paul의 해결책이지만 작동하지 않습니다.

Function validateDirectory 
ReadRegStr $R0 HKLM "SOFTWARE\Aadhaar Enrolment Client" "Installdir" 
Pop $R0 
StrCmp $R0 $OUTDIR +1 +3 
MessageBox MB_ICONSTOP|MB_OK 'The directory $OUTDIR already exists.Please choose a different directory.' 
Abort 
FunctionEnd 

이 기능은 메시지를 표시하지만, 중단하지 않습니다 스크립트의 상단에,이 함수를 참조하는

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE validateDirectory 
!insertmacro MUI_PAGE_DIRECTORY 

을 선언했습니다. 또한 디렉토리 선택 페이지에서 '뒤로'를 클릭하고 앞으로를 클릭하면 설치가 진행됩니다.

+0

이 문제에 대한 해결책이 없습니다. 특히 MUI를 사용하지 않는 것은? – e40

+0

없음 .. 그리고 나는 오랫동안 NSIS 사용을 중단했습니다. – Rex

+2

NSIS 포럼의 도움을 받아 작업을 수행했다고 언급 할 것입니다. http://forums.winamp.com/showthread.php?t=380848 – e40

답변

4

는이

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory 
!insertmacro MUI_PAGE_DIRECTORY 

같은 디렉토리 페이지의 "남겨"기능을 지정해야합니다 이것은 다음 버튼을 클릭하면 지정된 함수를 호출합니다.

그런 다음 선택한 디렉토리의 유효성을 검사하는 데 필요한 논리를 사용하여 LeaveDirectory 함수를 만들고 해당 디렉토리가 유효하지 않다고 판단되면 함수에서 Abort를 호출하기 만하면 설치 프로그램이 다음 단계로 넘어 가지 않습니다.

설명서는 "사용자 지정 기능"섹션 아래 this 페이지에 있지만 "페이지 사용자 지정 함수"제목을 확장해야하기 때문에 불행히도 명확하지 않습니다.

+0

고마워요. 그래서 내가 그렇게하면 사용자가 유효한 디렉토리를 선택할 때까지 디렉토리 화면에 남아있을 것입니까? – Rex

+0

수정하십시오. 디렉터리가 유효하지 않을 때 Abort 함수를 호출하면 다음 페이지로 이동하지 않습니다. –

+0

이 시도는 여기에 설명 된대로 작동하지 않습니다.이 경우 설치 프로그램이 모든 사용자가 잘못된 상태가됩니다. 입력이 무시되고 설치 관리자 아래에있는 모든 항목이 전달되고 작업 관리자의 백그라운드 프로세스로 이전되지만 Alt-Tab을 사용하여 전환 할 수 있습니다! 매우 이상한 ... – jheriko

관련 문제