2012-01-27 12 views
7

Ho una struttura di directory che deve essere aggiunta al programma di installazione. Ho 3 diverse versioni del mio script di installazione, e uno di loro è uno script di aggiornamento, richiede l'esclusione di un determinato file e una sottodirectory all'interno della mia directory di installazione. Così ho effettuare le seguenti operazioni:NSIS - File/x non esclude file/directory come richiesto

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

il file XML e la directory derbydb sono già presenti (in quanto si tratta di un aggiornamento) e quindi non voglio sovrascrivere loro. Tuttavia, eseguendo il programma di installazione, vedo chiaramente che entrambi i file vengono sovrascritti e inoltre la visualizzazione del setup.exe generato con 7zip indica che sono stati aggiunti. Uno può anche averlo appena chiamato

File /r ${InputDir}\*.* 

Quindi cosa c'è che non va qui? Desidero che NSIS disponga di una documentazione o di un elenco di avvertimenti migliori con parametri di comando/sintassi. (/ Rant)

risposta

1

Credo che il problema è che non si dovrebbe specificare il percorso completo dei file da escludere solo un modello, quindi in altre parole il comando dovrebbe essere simile a questo:

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

Ho già provato questo e non funziona. Include ancora il file xml all'interno del programma di installazione e sovrascrive quello che c'è già. – Rex

1

Lo /x consente di escludere alcuni file da includere nell'installer in fase di compilazione.

Se ho capito correttamente, si desidera evitare la sovrascrittura dei file durante l'installazione/aggiornamento in fase di esecuzione.

In questo modo è possibile utilizzare il flag del compilatore SetOverwrite prima della direttiva File. Guarda la sezione del manuale 4.8.2.8 SetOverwrite, la sezione 4.8.2 mostra anche un metodo per gestire dinamicamente lo SetOverwrite.

+0

Ma il punto è che non li esclude nemmeno al momento della compilazione. Se apro il file di installazione generato posso vedere che contiene i file che volevo escludere. – Rex

+0

@Rex: Beh, la documentazione non sembra indicare esplicitamente che i percorsi di directory sono supportati per '/ x' come lo sono per'/r' ... Dice: '/ x file | wildcard' – Seki

+0

Ma non lo fa t lavorare anche per i file, sia che si utilizzi un carattere jolly o che si fornisca un percorso esatto. – Rex

3

trovo che

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

non esclude Foo.img al momento della compilazione - che è incluso con gli altri file .img.

5

manuale NSIS (http://nsis.sourceforge.net/Docs/Chapter4.html) sezione 4.9.1.5 File contiene quanto segue:

Utilizzare il/x per escludere file o directory.

Ho cercato di usare diverse varianti, ma solo uno ha funzionato:

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

dove "Config" è una directory "MyProgram \ Plugins \ Config". NSIS cerca solo per nome e sarà errato impostare qualsiasi sottocartella (ad esempio "/ x Plugin \ Config" o "/ x $ INSTDIR \ MyProgram \ Plugins \ Config \"). C'è una mancanza: se si hanno le stesse cartelle in directory diverse, usando l'opzione/r, verranno cercate sia le directory che i file corrispondenti.

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

includono E: \ Giochi \ $ {} pname * *, ma escludono small-games.info..url in cartelle

1

Mi sembra ci sia un bug che è che se si fa:

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

poi C:\folder b\subfolder a\subfolder b sarà comunque ottenere copiato come parte della prima operazione.