6

目前我正在使用:

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

问题是重新安装时所有文件都会被覆盖。

问题:

  1. 仅当目标目录中不存在文件时,如何从安装程序复制文件?

  2. 如何覆盖目标目录中比安装程序中的文件更旧的文件?

编辑:

我找到了这个宏: http: //nsis.sourceforge.net/MoveFileFolder

4

2 回答 2

6

我认为最好的解决方案是使用SetOverwrite标志:

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

该标志可以在一个部分内动态更改。

所以具体回答这个问题:

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


SetOverwrite ifnewer   # Only overwrite if installers' file is newer
File /r ..\Output\*.*
于 2012-08-02T13:43:47.517 回答
3

使用IfFileExistsSetOverwrite的组合:

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
于 2012-08-03T06:05:56.690 回答