How can I copy files from the installer to the hard drive in NSIS but only if they do not already exist or are newer then the existing ones?
Asked Answered
T

2

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

Thornhill answered 2/8, 2012 at 8:32 Comment(0)
H
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\*.*
Hart answered 2/8, 2012 at 13:43 Comment(0)
P
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
Patel answered 3/8, 2012 at 6:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.