我需要检查是否已插入USB加密狗。我使用以下代码来执行此操作:
!macro HAS_USB_DONGLE
IfFileExists "E:\*.*" hasDongle 0
MessageBox MB_OK "USB Dongle is not inserted. Please insert the USB dongle and re-run this installer."
Abort
hasDongle:
!macroend
但这仅适用于E:上有任何文件(或目录)的情况。如何检查是否存在空目录?
答案 0 :(得分:1)
您的意思是特定文件夹吗?
IfFileExists
可与文件,通配符或目录一起使用。
!macro HAS_USB_DONGLE
IfFileExists "E:\ThisIsTheFolderYouAreLookingFor" hasDongle 0
MessageBox MB_OK "USB Dongle is not inserted. Please insert the USB dongle and re-run this installer."
Abort
hasDongle:
!macroend
答案 1 :(得分:1)
这是执行它的代码
!macro uni_isEmptyDir un
Function ${un}isEmptyDir
# Stack -> # Stack: <directory>
Exch $0 # Stack: $0
Push $1 # Stack: $1, $0
FindFirst $0 $1 "$0\*.*"
strcmp $1 "." 0 _notempty
FindNext $0 $1
strcmp $1 ".." 0 _notempty
ClearErrors
FindNext $0 $1
IfErrors 0 _notempty
FindClose $0
Pop $1 # Stack: $0
StrCpy $0 1
Exch $0 # Stack: 1 (true)
goto _end
_notempty:
FindClose $0
ClearErrors
Pop $1 # Stack: $0
StrCpy $0 0
Exch $0 # Stack: 0 (false)
_end:
FunctionEnd
!macroend
; make isEmptyDir function available both for installer and uninstaller
!insertmacro uni_isEmptyDir ""
!insertmacro uni_isEmptyDir "un."
安装程序部分的用法:
Push "Path to check"
Call isEmptyDir
Pop $0
卸载部分的用法:
Push "Path to check"
Call un.isEmptyDir
Pop $0
希望这有帮助。
答案 2 :(得分:1)
看到这已成为一个热门话题,我想我会发布自己的解决方案。我上面尝试的答案对我来说不可靠。我还没有测试过khayk提供的解决方案,这可能是最好的解决方案。最后,我通过创建一个虚拟文件,检查目录是否存在然后删除虚拟文件来解决问题。 Hacky,但适合我的使用。
!macro HAS_USB_DONGLE
FileOpen $0 "$USB_DIR\dummy" w
FileClose $0
ClearErrors
IfFileExists "$USB_DIR*" hasDongle 0
MessageBox MB_OK "USB Dongle is not inserted. Please insert the USB dongle and re-run this installer."
Abort
hasDongle:
Delete "$USB_DIR\dummy"
ClearErrors
!macroend
答案 3 :(得分:0)
另请注意,您的宏无效。宏是重复的代码,您不能多次使用相同的标签(在同一部分/功能内)。