2016-12-07 27 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} 

我知道我可以交換兩個IFS,它會工作,但它並沒有解決任何問題,因爲目錄在我的列表中隨機順序。有沒有辦法阻止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

謝謝,它已經奏效。相信我,我最初的方法是否創建一個文件夾 - 這是可能的!我剛剛再次測試過。如果您首先刪除testfolder1,然後再刪除testfolder1 \ testfolder2,則testfolder1將保留在那裏(已創建)。如果你交換命令,都會被刪除!如果你願意,你可以自己嘗試一下。 – Dovile

+0

我告訴你這是不可能的。不要使用Explorer進行檢查,因爲它不可信。 – Anders

相關問題