NSISインストーラーのMUIの事前関数を呼び出し、NSISインストーラーでページ/ダイアログをスキップします

StackOverflow https://stackoverflow.com/questions/5828879

質問

MUIダイアログの事前機能は、必要な場合にのみ呼び出すことができますか?

!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipComponentsPage
!insertmacro MUI_PAGE_COMPONENTS

Function SkipComponentsPage
 Abort
MessageBox MB_OK "You chose to UPDATE your current version"
FunctionEnd

//このセクションはデフォルトでチェックされます。つまり、ユーザーはこのセクションを選択または選択解除できません。これを実行する必要があります..........これを行うには?その名前のサインを含めました。その名前は「必須」です

Section "-mandatory" SEC_UPDATE
    #Do update............
SectionEnd

NSISインストーラーのカスタムダイアログページに2つのラジオバイトン(デモと更新)があります。ユーザーが更新をインストールすることを選択したとき(更新ラジオバットンを選択します)、コンポーネントページがスキップされ、指定されたセクションが自動チェックされて実行されます。

ただし、ユーザーがDEMをインストールすることを選択した場合(DEMO RadioButtonを選択します)、コンポーネントページはスキップされず、ユーザーはそのコンポーネントページでセクションをチェックまたはチェックすることができます。

役に立ちましたか?

解決

ページコールバックは常に呼び出されますが、関数内にロジックを配置できます。

...
section "" SEC_UPDATE 
sectionend

Function SkipComponentsPage
!insertmacro UnSelectSection ${SEC_UPDATE} ; Don't include update with demo by default?
${If} $InstallType == UPDATE
    !insertmacro SelectSection ${SEC_UPDATE}
    Abort
${EndIf}
Functionend

ユーザーにデモモードで更新を選択できるようにしたい場合は、私にはあまり明確ではありませんが、更新を強制したい場合は、セクションに読み取ることができます。

section "Update" SEC_UPDATE 
SectionIn RO
sectionend

(そして、事前関数から選択解除コールを削除します)

...または、お客様が提案したように、-Nameプレフィックスでセクションを見えないようにするだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top