2010-12-01 25 views
5

Quelqu'un peut-il me préciser que, lors de la désinstallation, j'ai besoin de tout supprimer du dossier d'installation, à l'exception du fichier de licence. Comment puis-je le faire avec les scripts NSIS?NSIS - Supprimer tous les fichiers sauf un fichier

Remerciements Cordialement, RoboAlex.

Répondre

4

Au lieu d'ouvrir le fichier, comme dans troisième point d'Anders, je le ferais de cette façon:

Rename $INSTDIR\license.txt $PLUGINSDIR\license.txt 
RMDir /R $INSTDIR # Remembering, of course, that you should do this with care 
CreateDirectory $INSTDIR 
Rename $PLUGINSDIR\license.txt $INSTDIR\license.txt 

Selon le moment où il obtient le fichier ne peut pas supprimer, RMDir /R peut laisse la plus grande partie derrière moi, car je crois qu'elle s'arrêtera quand elle ne pourra pas effacer quelque chose; De cette façon, vous vous en débarrasserez correctement. Cela va également perdre les statistiques du répertoire, mais ce n'est probablement pas important.

Je recommanderais cependant l'une des deux premières solutions d'Anders. Ils sont plus précis.

+0

Et s'il n'y a pas assez de place sur le lecteur où $ pluginsdir est? $ PLUGINSDIR ne doit pas être sur le même lecteur que $ INSTDIR (Accordé, un fichier de licence n'est probablement pas très grand, mais d'autres fichiers pourraient être) – Anders

+0

J'ai oublié le cas où il est sur un lecteur différent - Renommer ne fonctionnera pas à travers les volumes de toute façon! –

+0

La documentation de NSIS a ceci à dire au sujet de la commande renommer: "Vous pouvez l'employer pour déplacer un dossier de n'importe où sur le système à n'importe où ailleurs et vous pouvez déplacer un répertoire ailleurs sur le même lecteur" – Anders

3

Du haut de ma tête, il y a 3 façons de le faire:

  • Utilisez l'option Supprimer sur un fichier à l'heure sur une liste générée au moment de la compilation avec le système etc
  • Utilisation FindFirst/FindNext/FindClose à l'exécution et Supprimer tout sauf la licence basée sur le nom de fichier
  • Un peu un hack, mais vous devriez être capable d'ouvrir le fichier de licence pour write/append, alors Delete/RMDir ne sera pas en mesure de supprimer le fichier car il a une poignée ouverte.
+0

Je ne pense pas que garder une poignée ouverte sur le fichier ferait ce que l'on voulait - cela ferait que d'autres choses soient laissées derrière. –

+0

@Chris Morgan Cela fonctionne très bien: http://nsis.pastebin.com/wDvmNnCg Que pensez-vous pourrait être laissé pour compte? RMDir/r ne devrait pas vraiment être utilisé, donc je ne suis pas sûr que ce soit de quoi vous parlez ou non. – Anders

+0

'RMDir/R' était ce dont je parlais. Avec 'Delete' cela fonctionnera comme vous le souhaitez. –