2016-12-07 7 views
0

Lors de la désinstallation, je parcours une liste de sous-répertoires installés (List - C#) et les supprime. Je vérifie si un répertoire existe et si oui, je veux le supprimer. Voici le code:NSIS - comment l'empêcher de créer un répertoire?

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

Je sais que je pourrais échanger les deux ifs et cela fonctionnerait, mais il ne résout rien, car les répertoires sont dans un ordre aléatoire dans ma liste. Existe-t-il un moyen d'empêcher NSIS de créer des répertoires en vérifiant s'ils existent? J'ai cherché une solution en ligne mais n'ai absolument rien trouvé.

Répondre

0

Je ne vois pas vraiment comment cela est possible, ${IfFileExists} est un wrapper autour de IfFileExists et en interne cette instruction NSIS est implémentée avec FindFirstFile. Il n'y a pas moyen de créer un répertoire!

L'avantage est que vous ne devez pas utiliser ${IfFileExists} parce RMDir (sans /r) ne supprimera le répertoire si elle est vide et ne fait rien si elle n'existe pas.

Si vous ne connaissez pas l'ordre des répertoires, ni si elles peuvent être imbriquées à la compilation alors vous devez continuer à essayer de supprimer tant que vous avez réussi à supprimer au moins un élément:

!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

Merci, ça a marché. Croyez-moi, mon approche initiale crée un dossier - c'est possible! Je viens de le tester à nouveau. Si vous supprimez d'abord testfolder1 et second testfolder1 \ testfolder2, le testfolder1 STAYS y est créé. Si vous échangez les commandes, les deux sont supprimées! Vous pouvez l'essayer par vous-même si vous le souhaitez. – Dovile

+0

Je vous dis que ce n'est pas possible. N'utilisez pas Explorer pour vérifier car il ne peut pas être approuvé. – Anders