Изменение выбора на странице компонентов NSIS в зависимости от ОС, на которой мы устанавливаем

Мне трудно изменить выбор на странице компонентов nsis. Требование заключается в том, что во время установки я получаю страницу с лицензионным соглашением, если пользователь соглашается, он нажимает "Я СОГЛАШАЮСЬ", после того, как пользователь нажимает "Я СОГЛАШАЮСЬ", я хочу знать, на какой ОС устанавливается программа, и она может быть либо на Windows Embedded OS, либо на WinXp/Win7. Поэтому, если это ОС Windows Embedded, я хочу изменить установочный пакет, а если это не ОС Windows Embedded, то установочный пакет будет другим.

Я использую MUI ver1, а не MUI2 в моем проекте. Пожалуйста, дайте мне знать, как этого можно достичь.

2 ответа

Чтобы проверить ОС, в которой запущена установка, вы можете использовать макросы, определенные 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}

WinVer.nsh не поддерживает проверку для встроенного NT, но вы можете выполнить проверку самостоятельно:

!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
Другие вопросы по тегам