2014-02-13 3 views
0

У меня есть скрипт NSIS с инструкцией RMDir /r, которая не удаляет целевой каталог (это просто освобождает его).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 

Проблема заключается в том не об использовании вина в MacOSX (то же самое происходит на Windows).

Я обрезаны мой installer.nsi этому примеру:

!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 

Что я делаю не так?

+0

Почему вы используете какую-то случайную версию? Текущая альфа должна быть лучше, чем что-либо с 2013 года. – Anders

+0

@Anders: Я использую текущую версию 'makensis', доступную в Homebrew, - это не _that_ random. – mgarciaisaia

+0

Между v2.46 и v3.0a2 было много моментов времени, когда код в багажнике был сломан или неисправен, и я бы не рекомендовал использовать моментальные снимки той эпохи. v16-Dec-2013.cvs, вероятно, попадает в эту категорию. – Anders

ответ

0

Путь Delete "$INSTDIR\Uninstall.exe" до RMDir, не после.

Edit:

Если какая-то другая программа имеет открытый дескриптор к папке или что-то внутри папки, то Rmdir не сможет удалить его.

В Windows я бы сказал вам использовать Sysinternals Process Monitor, чтобы узнать, почему удаление не удается, я не знаю, будет ли это работать в WINE или если ваша «хост-система» предотвращает удаление в некотором роде ...

+0

Это не имело значения:/(даже если положить 'Delete" $ {SOME_DATA} \ Uninstall.exe "', как и должно быть) – mgarciaisaia

+0

И RMDir, и Delete должны использовать $ instdir в реальной ситуации, а не в определении с путём к чему-то на вашей локальной машине. – Anders

+0

Дело в моем реальном случае. Я пытаюсь удалить некоторые каталоги данных приложения, которые _need_ будут находиться за пределами '$ INSTDIR'. Это требование, и у меня нет выбора. – mgarciaisaia

 Смежные вопросы

  • Нет связанных вопросов^_^