2016-12-07 3 views
0

При удалении я просматриваю список установленных подкаталогов (List - C#) и удаляю их. Я проверяю, существует ли каталог, и если да, я хочу удалить его. Вот код:NSIS - как остановить его от создания каталога?

//here it deletes the testfolder1 directory - perfect 
${If} ${FileExists} "$MUSIC\testFolder1\*" 
RMDir "$MUSIC\testFolder1" 
${EndIf} 

//problem - here, instead of ONLY CHECKING if directory exists, 
// it creates "testFolder1" again! 
${If} ${FileExists} "$MUSIC\testFolder1\testfolder2\*" 
RMDir "$MUSIC\testFolder1\testfolder2" 
${EndIf} 

Я знаю, что я мог бы поменять местами два сослагательного наклонения, и он будет работать, но это ничего не решает, потому что каталоги находятся в случайном порядке в моем списке. Есть ли способ остановить NSIS от создания каталогов при проверке, существуют ли они? Я искал решение в Интернете, но ничего не нашел.

ответ

0

Я действительно не вижу, как это возможно, ${IfFileExists} является оберткой вокруг IfFileExists и внутренне эта инструкция NSIS реализована с помощью FindFirstFile. Невозможно создать каталог!

Достоинством является то, что вы не должны использовать ${IfFileExists} потому RMDir (без /r) будет только удалить каталог, если он пустой и ничего не делает, если он не существует.

Если вы не знаете порядок каталогов, ни, если они могут быть вложены во время компиляции, то вы должны продолжать пытаться удалять до тех пор, как вам удалось удалить по крайней мере один пункт:

!include LogicLib.nsh 
Section 
CreateDirectory "$Temp\testFolder1" 
CreateDirectory "$Temp\testFolder1\testfolder2" 

!macro TryRMDir path counter 
ClearErrors 
${IfThen} ${FileExists} "${path}" ${|} IntOp ${counter} ${counter} + 1 ${|} 
RMDir "${path}" 
${IfThen} ${FileExists} "${path}" ${|} IntOp ${counter} ${counter} - 1 ${|} 
!macroend 
loop: 
    StrCpy $0 0 
    !insertmacro TryRMDir "$Temp\testFolder1" $0 
    !insertmacro TryRMDir "$Temp\testFolder1\testfolder2" $0 
StrCmp $0 0 "" loop ; If we deleted anything we must try again 
SectionEnd 
+0

Спасибо, он сработал. Поверьте мне, мой первоначальный подход создает папку - это возможно! Я только что проверил его снова. Если вы в первую очередь удалите тестовую папку1 и вторую тестовую папку1 \ testfolder2, тестовая папка1 STAYS там (создается). Если вы меняете команды, оба удаляются! Вы можете попробовать это сами, если хотите. – Dovile

+0

Я говорю вам, что это невозможно. Не используйте Explorer для проверки, потому что ему нельзя доверять. – Anders

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