NSIS - 如何阻止它创建目录?

NSIS - how to stop it from creating a directory?

卸载后,我浏览了已安装子目录列表 (List - C#) 并将它们删除。我检查一个目录是否存在,如果存在,我想删除它。这是代码:

 //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}

我知道我可以交换这两个 ifs,它会起作用,但它没有解决任何问题,因为目录在我的列表中是随机排列的。有什么方法可以阻止 NSIS 在检查目录是否存在时创建目录?我在网上寻找解决方案,但一无所获。

我真的不明白这是怎么可能的,${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 [=10=] 0
    !insertmacro TryRMDir "$Temp\testFolder1" [=10=]
    !insertmacro TryRMDir "$Temp\testFolder1\testfolder2" [=10=]
StrCmp [=10=] 0 "" loop ; If we deleted anything we must try again
SectionEnd