Цитата Kopejkin:
Только "не аккуратненько как-то получается" »
|
Это да, но никто пользователя и не заставляет вводить кучу путей для установки с заведомо пустыми папками, чтобы сама программа была в каких-то дебрях
В голову пришла такая идея, можно реализовать опять же циклом такую штуку: проверяем, является ли каталог пустым, начиная с $INSTDIR, если пустой - удаляем и "поднимаемся вверх" по дереву папок, делая аналогичную проверку, если папка снова пустая - снова удаляем и ползём ещё выше
разомни пальчики комбинациями ctrl+c и ctrl+v
Код:
![Выделить весь код](images/misc/selectcode.png)
!include "FileFunc.nsh"
!include "Logiclib.nsh"
Код:
![Выделить весь код](images/misc/selectcode.png)
StrCpy $0 "$INSTDIR"
${While} $0 != "" ; если $0 = пустое значение, значит каталог либо с файлами, либо не существует
${DirState} "$0" $1 ; получаем статус директории (пустая/с файлами)
${If} $1 == "1" ; если с файлами, то обнуляем $0 и тем самым выходим из цикла
${OrIf} $1 == "-1"" ; или если папка не существует, то обнуляем $0 и тем самым выходим из цикла
DetailPrint "папка '$0' с файлами или не существует => прекращаем проверку"
StrCpy $0 "" ; обнуляем переменную с путём, чтобы завершить цикл
${ElseIf} $1 == 0 ; если папка пустая
RMDir "$0" ; удаляем пустую папку
DetailPrint "папка '$0' пустая => удаляем"
${GetParent} "$0" $0 ; получаем родителя папки, которую удалили, записываем значение в эту же переменную
DetailPrint "следующая папка => '$0'"
${EndIf}
${EndWhile}
Конечно же, прописывать нужно самым последним действием в секции деинсталлятора, чтобы при начале цикла папка $INSTDIR была пустой, а то цикл сразу завершится...