5

At the moment I am using:

SetOutPath "$INSTDIR\folder\subfolder"
File /r ..\Output\*.*

The problem is when re-installing all files will be overwritten.

Questions:

  1. How do I copy the files from the installer only if they do not already exist in the target directory?

    and

  2. How do I overwrite those files in the target directory that are older then the ones in the installer?

Edit:

I found this macro: http://nsis.sourceforge.net/MoveFileFolder

dwj
  • 3,443
  • 5
  • 35
  • 42
cfischer
  • 470
  • 8
  • 24

2 Answers2

6

I think the best solution is to use the SetOverwrite flag:

http://nsis.sourceforge.net/Docs/Chapter4.html#4.8.2.8

This flag can be changed on the fly within a section.

So to answer the question specifically:

SetOverwrite off       # Only copy if file does not exist
File /r ..\Output\*.*


SetOverwrite ifnewer   # Only overwrite if installers' file is newer
File /r ..\Output\*.*
RyanE
  • 425
  • 3
  • 10
3

Use combination of IfFileExists and SetOverwrite:

Section "Copy newer files"
SetOverwrite ifnewer 
; Set flag to owerwrite files only if they are newer than files in output dir

IfFileExists $INSTDIR\program.exe FileExists FileDoesNotExist

FileDoesNotExist:
; Copy file to output directory

SetOutPath "$INSTDIR"
File "program.exe" ; Flag from SetOverwrite is applied here

FileExists:
; File exists - do nothing 

; Continue ...
SectionEnd
Slappy
  • 5,250
  • 1
  • 23
  • 29