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
卸载后,我浏览了已安装子目录列表 (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