2016-04-05 22 views
1

正常に動作するNSISインストーラを作成しました。ここでは、「install as update」という別のセクションを追加します。このセクションは、チェックされていないときにのみ実行します。セクションがチェックされていない場合、NSISは何もしません。

理由: フルバージョンをインストールすると、ソフトウェアのアクティベーションコードを含む特定のファイルが上書きされます。

私はそうしなければならないし、 "フルバージョンをインストールする"というセクションを作ることができますが、それはあまり意味がありません。

Section /o "Install as update" SecUpdate 
    *if(checked == false){ 
     SetOutPath "$INSTDIR\data" 
     File "data\ConfigFile.xml" 
     File "..." 
     File "..." 
     File "..." 
     File "..." 
     File "..." 
     File "..." 
     File "..." 
    *} 
SectionEnd 

*これら2行は、私がしたいことを表しています。

答えて

2

セクションがチェックされていない場合、そのセクション内のコードは実行しても実行されないため、コードを別の場所に配置する必要があります。隠しセクションは良い解決策です:

!include LogicLib.nsh 
!include Sections.nsh 

Page Components 
Page InstFiles 

Section "Program files" 
SectionIn RO 
;SetOutPath ... 
;File ... 
SectionEnd 

Section /o "Install as update" SID_UPDATE 
SectionEnd 

Section -OverwriteActivation SID_OWACTIVATION 
SetOutPath "$INSTDIR\data" 
File "whatever.xml" 
SectionEnd 

Function .onSelChange 
${If} ${SectionIsSelected} ${SID_UPDATE} 
    !insertmacro UnselectSection ${SID_OWACTIVATION} 
${Else} 
    !insertmacro SelectSection ${SID_OWACTIVATION} 
${EndIf} 
FunctionEnd 
関連する問題