2010-12-01 51 views

Respuesta

4

En lugar de abrir el archivo, como en el tercer punto de Anders, lo haría de esta manera:

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 

Dependiendo de cuando se pone en el archivo no se puede eliminar, puede RMDir /R dejar la mayor parte atrás, ya que creo que se detendrá cuando no pueda eliminar algo; de esta manera se deshace de todo adecuadamente. Esto también perderá las estadísticas del directorio, pero eso probablemente no sea importante.

Sin embargo, recomendaría una de las dos primeras soluciones de Anders. Ellos son más precisos.

+0

Y si no hay suficiente espacio en el disco donde $ pluginsdir es? $ PLUGINSDIR no tiene que estar en la misma unidad que $ INSTDIR (De acuerdo, un archivo de licencia probablemente no es muy grande, pero otros archivos podrían serlo) – Anders

+0

Me olvidé del caso en que está en una unidad diferente - Renombrar no funcionará a través de volúmenes de todos modos! –

+0

Los documentos NSIS tienen esto que decir sobre el comando de cambio de nombre: "Puedes usarlo para mover un archivo desde cualquier lugar del sistema a cualquier otro lugar y puedes mover un directorio a otro lugar en la misma unidad" – Anders

3

De la parte superior de mi cabeza, hay 3 formas de hacer esto:

  • Uso Eliminar en un archivo en el momento en una lista generada en tiempo de compilación con el sistema etc
  • Uso FindFirst/FindNext/FindClose en tiempo de ejecución y Eliminar todo excepto la licencia basada en el nombre de archivo
  • Un poco hackeo, pero debería poder abrir el archivo de licencia para escribir/anexar, luego Delete/RMDir no podrá eliminar el archivo ya que tiene un mango abierto
+0

No creo que mantener un asa abierta en el archivo haga lo que se desee, sino que dejará atrás otras cosas. –

+0

@Chris Morgan Funciona muy bien: http://nsis.pastebin.com/wDvmNnCg ¿Qué crees que podría quedar atrás? RMDir/r no debería usarse realmente, así que no estoy seguro de si eso es de lo que está hablando o no – Anders

+0

'RMDir/R' era de lo que estaba hablando. Con 'Delete' funcionará como lo desee. –

Cuestiones relacionadas