비 기본 설치 디렉토리를 더 잘 처리하기 위해 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에 대한 친숙 함은 설치 프로그램을 예제로 작성한 다음 다시 만지는 방식으로 제한됩니다.
그게 내가하고있는 일이며 작동하지 않습니다. '$ UNINSTALL_OLD_VERSION'은 변수에서 위의 제거 프로그램 줄입니다. – mwtb
하지만 제거 프로그램이 작동합니까? 삭제가 실패한 경우 Sysinternal의 프로세스 모니터를 시도해보십시오. – Anders
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 –