目前我正在使用:
SetOutPath "$INSTDIR\folder\subfolder"
File /r ..\Output\*.*
问题是重新安装时所有文件都会被覆盖。
问题:
仅当目标目录中不存在文件时,如何从安装程序复制文件?
和
如何覆盖目标目录中比安装程序中的文件更旧的文件?
编辑:
我找到了这个宏: http: //nsis.sourceforge.net/MoveFileFolder
目前我正在使用:
SetOutPath "$INSTDIR\folder\subfolder"
File /r ..\Output\*.*
问题是重新安装时所有文件都会被覆盖。
问题:
仅当目标目录中不存在文件时,如何从安装程序复制文件?
和
如何覆盖目标目录中比安装程序中的文件更旧的文件?
编辑:
我找到了这个宏: http: //nsis.sourceforge.net/MoveFileFolder
我认为最好的解决方案是使用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\*.*
使用IfFileExists和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