2012-10-30 42 views
2

我想動態設置SetOverwrite狀態以便無條件地替換一些文件或僅在我的安裝程序提供更新的版本時進行替換。Conditional SetOverwrite

我與logiclib

${if} $isReinstall = 1 
    SetOverwrite on 
    ${debug} "SetOverwrite on (overwrite)" 
${else} 
    SetOverwrite ifnewer 
    ${debug} "SetOverwrite ifnewer" 
${endif} 
File "foo" 

,擁有古典IntCmp

IntCmp $isReinstall 1 0 +3 +3 
SetOverwrite on 
goto +2 
SetOverwrite ifnewer 
File "foo" 

但沒有嘗試似乎工作:如果我的文件foo已經存在磁盤上,它總是跳過。我的$isReinstall是否爲1

似乎指令流中的最後SetOverwrite語句(不管logiclib宏)是否重載了前一個語句。

如果我在File指令前添加另一個SetOverwrite on,則文件將被正確替換。

我的分析是否正確?我怎麼能在運行時決定文件是否可以被替換?

回答

3

嘗試使用此代碼來代替:

${If} $isReinstall = 1 
    SetOverwrite on 
    File "foo" 
${Else} 
    SetOverwrite ifnewer 
    File "foo" 
${EndIf} 

需要注意的重要一點是,文件命令出現的。如果塊中,而這需要做,因爲SetOverwrite命令影響低於它的每一個線。請參閱this一小段NSIS文檔以獲取完整說明。

+0

我擔心這種解釋,但是在手冊中沒有發現它自己......在現實世界的情況下,我有很多'File'語句來複制幾個部分。 :(感謝您指向我。 – Seki