2011-02-21 1 views
1

비 기본 설치 디렉토리를 더 잘 처리하기 위해 NSIS 설치 프로그램을 조정 중이며 문제가 발생했습니다. 대한NSIS의 다른 디렉토리에서 이전 버전을 제거하는 방법은 무엇입니까?

내 설치 점검합니다 설치를 통해 존재하는 경우 기존 설치 제거 프로그램을 호출 기존 : $ OLD_INSTDIR 내가 생성 한 바르이다

'"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR' 

가 레지스트리 항목에서 채워집니다. 이것은 잘 작동하지만 누군가가 기존 설치가있는 곳에서 설치 디렉토리를 변경하고 제거 프로그램 실행 파일과 이전 설치 디렉토리가 삭제되지 않는다는 것을 알면 시나리오를 테스트했습니다.

조금 파고 들자 _ _ = $ OLD_INSTDIR 매개 변수로 인해 설치 프로그램이 임시 디렉토리에 복사되는 것이 아니라 어디서 실행되는지 알 수 있습니다. 이것은 삭제가 발생하지 않는 이유를 설명합니다.

기존 버전을 제거한 후에 제거 프로그램과 디렉토리를 명시 적으로 삭제하려고 시도했지만이 방법으로도 작동하지 않습니다.

ExecWait '$UNINSTALL_OLD_VERSION' 
Delete $OLD_INSTDIR/uninstall.exe 
RmDir $OLD_INSTDIR 

내가해야 할 일에 대한 아이디어가 있습니까? 이것이 사소한 일인 경우 사과드립니다.하지만 NSIS에 대한 친숙 함은 설치 프로그램을 예제로 작성한 다음 다시 만지는 방식으로 제한됩니다.

답변

0
ExecWait '"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR' 
Delete "$OLD_INSTDIR\uninstall.exe" 
RmDir "$OLD_INSTDIR" 

_? =이 _ % temp %를 행동에 보통 사본을 중지뿐만 아니라, 그 자체를 삭제하는 제거 프로그램을 방지하므로 먼저 실행해야합니까? 매개 변수를 제거한 다음 제거 프로그램을 삭제하십시오.

+0

그게 내가하고있는 일이며 작동하지 않습니다. '$ UNINSTALL_OLD_VERSION'은 변수에서 위의 제거 프로그램 줄입니다. – mwtb

+0

하지만 제거 프로그램이 작동합니까? 삭제가 실패한 경우 Sysinternal의 프로세스 모니터를 시도해보십시오. – Anders

+0

http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.1에서 다음과 같이 경고 : RMDir/r $ 사용 제거 프로그램의 INSTDIR이 안전하지 않습니다. 드물 긴하지만 사용자가 Program Files에 설치했을 수 있으며이 명령은 제거 프로그램과 관련이없는 다른 프로그램을 포함하여 전체 Program Files 폴더를 지 웁니다. 사용자는 프로그램의 파일 외에 다른 파일을 넣을 수 있으며 프로그램과 함께 삭제 될 것으로 예상됩니다. 해결 방법은 설치 프로그램에서 설치 한 파일 만 제거 할 수 있습니다. http://nsis.sourceforge.net/Uninstall_only_installed_files –