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

私はディレクトリが私のリスト内のランダムな順序であるので、私は2つのIFSを交換でき、それが働くだろうが、それは何も解決しません知っています。 NSISが存在するかどうかをチェックしてディレクトリを作成するのを止める方法はありますか?私はオンラインで解決策を探しましたが、絶対に何も見つかりませんでした。

答えて

0

どうすれば可能かわかりませんが、${IfFileExists}IfFileExistsのラッパーで、このNSIS命令はFindFirstFileで実装されています。これがディレクトリを作成する方法はありません!の場合、RMDir/rなし)はディレクトリが空の場合のみ削除され、存在しない場合は何もしないため、${IfFileExists}を使用する必要はありません。

あなたは、ディレクトリの順序を知らないも、彼らはコンパイル時に入れ子にすることができるならば、あなたは限り、あなたは少なくとも一つの項目を削除することに成功したとして、削除しようとしておく必要がある場合:

!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

私はそれが不可能であることを伝えています。エクスプローラを使用しないでください。信頼できないため、確認しないでください。 – Anders

関連する問題