2014-02-13 9 views
0

대상 디렉토리를 제거하지 않는 RMDir /r 명령어가있는 NSIS 스크립트가 있습니다. 비어있는 것입니다.RMDir/r은 디렉토리를 비워 둡니다.하지만 지우지는 않습니다.

$ makensis -version 
v16-Dec-2013.cvs 
$ pwd 
/Users/mgarciaisaia/.wine/drive_c 
$ ls 
Program Files users  windows 
$ wine ~/InstallerTest.exe 
$ ls 
InstallerTest Program Files users  windows 
$ find InstallerTest 
InstallerTest 
InstallerTest/SomeData 
InstallerTest/SomeData/some-file.txt 
InstallerTest/SomeData/Uninstall.exe 
$ wine InstallerTest/SomeData/Uninstall.exe 
$ ls 
InstallerTest Program Files users  windows 
$ find InstallerTest 
InstallerTest 

문제는 (동일한 윈도우에서 발생)에서라도 와인을 사용하는 방법에 대한 하지입니다.

!addplugindir nsis 
    !define MUI_PRODUCT "InstallerTest" 
    CRCCheck On 
    !include "MUI2.nsh" 
    Name "${MUI_PRODUCT}" 
    BrandingText "${MUI_PRODUCT}" 

    OutFile "InstallerTest.exe" 

    ShowInstDetails "nevershow" 
    ShowUninstDetails "nevershow" 

    !define SOME_DATA "C:\InstallerTest\SomeData" 

    !define MUI_ABORTWARNING 
    Caption "${MUI_PRODUCT} Installer" 
    !insertmacro MUI_PAGE_INSTFILES 

    !insertmacro MUI_UNPAGE_INSTFILES 
    !insertmacro MUI_LANGUAGE "English" 

Section "Install" Install 
    DetailPrint "Installing..." 

    SetOutPath "${SOME_DATA}" 
    File "some-file.txt" 
    WriteUninstaller "${SOME_DATA}\Uninstall.exe" 
SectionEnd 

Section "un.Remove InstallTest" 
    DetailPrint "Removing..." 

;Delete Files 
    RMDir /r "${SOME_DATA}" 
    Delete "${SOME_DATA}\Uninstall.exe" 
SectionEnd 

내가 잘못 있다고 무엇 :

installer.nsi이 예에 손질 한?

+0

왜 임의의 버전을 사용하고 있습니까? 현재 알파는 2013 년보다 더 좋아야합니다. – Anders

+0

@ 앤더스 : Homebrew에서 사용할 수있는 현재 'makensis'버전을 사용하고 있습니다. – mgarciaisaia

+0

v2.46과 v3.0a2 사이에는 트렁크의 코드가 깨지거나 버그가 많은 시간대가 있었으며 그 시대의 스냅 샷을 사용하지 않는 것이 좋습니다. v16-Dec-2013.cvs는 아마도 해당 카테고리에 속합니다. – Anders

답변

0

Delete "$INSTDIR\Uninstall.exe" 앞에 RMDir을 입력하십시오.

편집 :

다른 프로그램 폴더 안에있는 폴더 또는 무언가에 대한 열린 핸들이 경우 RMDIR를 삭제 할 수 없습니다.

Windows에서 Sysinternals Process Monitor를 사용하여 삭제가 실패한 이유를 알 수 있습니다. WINE에서 작동하는지 아니면 "호스트 OS"가 어떤 방식 으로든 삭제를 방지하는지 알 수 없습니다.

+0

아무런 차이가 없었습니다./(삭제도 $ {SOME_DATA} \ Uninstall.exe "를 그대로 두었습니다.) – mgarciaisaia

+0

RMDir과 Delete는 모두 실제 상황에서 $ instdir을 사용해야합니다. 로컬 컴퓨터에서. – Anders

+0

요점은 필자가'$ INSTDIR' 외부에있는 _need_에있는 앱의 데이터 디렉토리를 제거하려고하는 것입니다. 그것은 요구 사항이며, 나는 그것에 대한 선택권이 없습니다. – mgarciaisaia