2012-01-27 7 views
7

Tengo una estructura de directorio que debe agregarse al instalador. Tengo 3 versiones diferentes de mi script de instalación, y una de ellas es una secuencia de comandos de actualización, requiere excluir un determinado archivo y un subdirectorio dentro de mi directorio de instalación. Así que hacer lo siguiente:NSIS - File/x no excluye archivos/directorios como se indica

File /r /x ${InputDir}\data\someFile.xml /x ${InputDir}\data\derbydb\runtime\*.* ${InputDir}\*.* 

el archivo XML y el directorio derbydb ya están presentes (ya que esto es una actualización) y por lo tanto no quiero sobrescribirlos. Sin embargo, al ejecutar el instalador, veo claramente que ambos archivos se sobrescriben y, además, ver el archivo setup.exe generado con 7zip muestra que también se agregaron. Uno también podría haber llamado

File /r ${InputDir}\*.* 

Entonces, ¿qué está mal aquí? Deseo que NSIS tenga una mejor documentación o enumere las advertencias con sus parámetros de comandos/sintaxis. (/ Diatriba)

Respuesta

1

Creo que el problema es que no se debe especificar la ruta completa a los archivos para excluir sólo un patrón, por lo que en otras palabras, el comando debe tener este aspecto:

File /r /x data\someFile.xml /x data\derbydb\runtime\*.* ${InputDir}\*.* 
+0

Ya lo he intentado y no funciona. Todavía incluye el archivo xml dentro del instalador y sobrescribe lo que ya está allí. – Rex

1

El /x es para excluir algunos archivos que se incluirán en el instalador en tiempo de compilación.

Si entiendo correctamente, quiere evitar la sobreescritura de archivos durante la instalación/actualización en tiempo de ejecución.

Por lo tanto, podría usar el indicador del compilador SetOverwrite antes de la directiva File. Consulte la sección del manual 4.8.2.8 SetOverwrite, la sección 4.8.2 también muestra un método para manejar SetOverwrite dinámicamente.

+0

Pero el punto es que no los excluye incluso en el momento de la compilación. Si abro el archivo de configuración generado, puedo ver que contiene los archivos que quería excluir. – Rex

+0

@Rex: Bueno, la documentación no parece indicar explícitamente que las rutas de directorios sean compatibles con '/ x' como lo son para'/r' ... Dice: '/ x archivo | comodín' – Seki

+0

Pero no es así Funciona incluso para archivos, ya sea que use un comodín o proporcione una ruta exacta. – Rex

3

encuentro que

File /x "${DIRECTORY}Foo.img" "${DIRECTORY}*.img" 

no excluye Foo.img en tiempo de compilación - que se incluye con los otros archivos .img.

5

manual de NSIS (http://nsis.sourceforge.net/Docs/Chapter4.html) sección 4.9.1.5 del archivo contiene lo siguiente:

Use/interruptor de x para excluir archivos o directorios.

He intentado utilizar diferentes variantes, pero sólo funcionaba uno:

SetOutPath $INSTDIR 
File /r /x Config ..\MyProgram\*.* 

donde "Config" es un directorio "MiPrograma \ Plugins \ Config". NSIS busca solo por nombre y será incorrecto establecer cualquier subcarpeta (por ejemplo, "/ x Plugins \ Config" o "/ x $ INSTDIR \ MyProgram \ Plugins \ Config \"). Hay una falta: si tiene las mismas carpetas en directorios diferentes, usando el modificador/r, se buscarán ambos directorios y archivos coincidentes.

1
var pname 
!define pname "Salt v1.2.9.3c" 
File /r /x small-games.info.url "E:\Games\${pname}\*.*" 

incluyen E: \ Juegos \ $ {} pname * *, añadiendo los small-games.info..url en carpetas

1

Me parece que hay un error y es que si lo hace:

File /r "C:\folder a\subfolder b" 
File /r /x "subfolder b" "C:\folder b" 

continuación C:\folder b\subfolder a\subfolder b seguirá recibiendo copiado como parte de la primera operación.

Cuestiones relacionadas