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 に答える