0

nsisのコンポーネントページで選択を変更するのが難しいと感じています。要件は、インストール中にライセンス契約ページを取得することです。ユーザーが同意した場合は、[同意する]をクリックします。ユーザーが[同意する]をクリックした後、セットアップがインストールされているOSを知りたいのですが。 WindowsEmbeddedOSまたはWinXp/Win7のいずれかである必要があります。したがって、Windows Embedded OSの場合は、インストールパッケージを変更したいのですが、Windows Embedded OSでない場合は、インストールパッケージが異なります。

プロジェクトでMUI2ではなくMUIver1を使用しています。これを実現する方法を教えてください。

4

2 に答える 2

1

WinVer.nshはEmbeddedNTのチェックをサポートしていませんが、自分でチェックを実行できます。

!include Sections.nsh
!include MUI.nsh

!ifndef VER_SUITE_EMBEDDEDNT
!define VER_SUITE_EMBEDDEDNT 0x00000040
!endif

!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English


Section "Embedded" SID_EMBED
SectionIn RO
SectionEnd

Section "Normal" SID_NORMAL
SectionIn RO
SectionEnd

Function .onInit
System::Call '*(i156,&i152)i.r1'
System::Call 'KERNEL32::GetVersionExA(ir1)'
System::Call '*$1(&i152,&i2.r2)'
System::Free $1
IntOp $2 $2 & ${VER_SUITE_EMBEDDEDNT}
${If} $2 <> 0
    !insertmacro SelectSection ${SID_EMBED}
    !insertmacro UnselectSection ${SID_NORMAL}
${Else}
    !insertmacro UnselectSection ${SID_EMBED}
    !insertmacro SelectSection ${SID_NORMAL}
${EndIf}
FunctionEnd
于 2012-12-04T12:20:50.323 に答える
1

セットアップが実行されている OS をテストするには、Winver.nsh提供されているマクロで定義されたマクロを使用しLogicLib.nshて、このような洗練されたテストを作成できます。

;Dont't forget to include
!include "LogicLib.nsh"                 # use of various logic statements
!include "WinVer.nsh"                   # LogicLib extension for OS tests

プラットフォーム テストの例:

${if} ${AtLeastWin95}
${AndIf} ${AtMostWinME}
    ;here we are on a pre-win2k
    ;do something        
${elseIf} ${isWin2008}
${orIf} ${AtLeastWin2008R2}
    ;this is post-win7
    ;do other thing
${endif}

インストールするコンポーネントを実行時に変更するには、次のマクロを使用できますSections.nsh

;if you have
Section "Sample Database" SecApplicationDB
;...
SectionEnd

;you can select or un select by code:
!insertmacro SelectSection ${SecApplicationDB}
;or
!insertmacro UnselectSection ${SecApplicationDB}
于 2012-12-04T09:52:22.553 に答える