根据安装的操作系统更改NSIS组件页面中的选择

根据安装的操作系统更改NSIS组件页面中的选择,nsis,Nsis,我发现很难更改nsis组件页面中的选择。 要求是在安装过程中,我得到一个许可协议页面,如果用户同意,那么他/她将单击我同意,在用户单击我同意后,我想知道安装在哪个操作系统上 正在安装的安装程序可以是Windows嵌入式操作系统或WinXp/Win7。 因此,如果是Windows嵌入式操作系统,我想更改安装包,如果不是Windows嵌入式操作系统,则安装包将不同 我在项目中使用的是MUI ver1而不是MUI2。 请告诉我如何实现这一点。要测试运行安装程序的操作系统,您可以使用定义的宏Winver

我发现很难更改nsis组件页面中的选择。 要求是在安装过程中,我得到一个许可协议页面,如果用户同意,那么他/她将单击我同意,在用户单击我同意后,我想知道安装在哪个操作系统上 正在安装的安装程序可以是Windows嵌入式操作系统或WinXp/Win7。 因此,如果是Windows嵌入式操作系统,我想更改安装包,如果不是Windows嵌入式操作系统,则安装包将不同

我在项目中使用的是MUI ver1而不是MUI2。
请告诉我如何实现这一点。

要测试运行安装程序的操作系统,您可以使用定义的宏
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}
;这是一个win2k之前的版本
;做点什么
${elseIf}${isWin2008}
${orIf}${AtLeastWin2008R2}
;这是后win7
;做其他事情
${endif}
要在运行时更改要安装的组件,可以使用
节.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
!包括第3.nsh节
!包括梅兰芳
!ifndef版本套件嵌入
!定义版本套件嵌入0x00000040
!恩迪夫
!insertmacro MUI_页面许可证“${{uuuu文件}”
!插入宏MUI_页面_组件
!插入宏MUI_页面文件
!插入宏梅语言英语
“嵌入”部分SID_嵌入
反渗透
分段结束
“正常”部分SID_正常
反渗透
分段结束
函数。onInit
系统::调用“*(i156和i152)i.r1”
系统::调用'KERNEL32::GetVersionExA(ir1)'
系统::调用“*$1(&i152,&i2.r2)”
系统::免费1美元
IntOp$2$2&${VER_SUITE_EMBEDDEDNT}
${If}$2 0
!insertmacro SelectSection${SID_EMBED}
!insertmacro取消选择节${SID_NORMAL}
${Else}
!insertmacro取消选择节${SID_EMBED}
!insertmacro SelectSection${SID_NORMAL}
${EndIf}
功能端

感谢您的反馈。但在这里,我可以通过读取注册表项来知道我正在哪个操作系统上安装安装程序。我的疑问是如何更改nsisOne解决方案的组件选择页面中的安装类型。我发现,一个解决方案是使用section.nsh来选择或取消选择组件页面中的复选框,在function.onInit中,这是正确的解决方案吗?我也尝试过使用SetCurInstType,但这对我来说不起作用me@DivyPrakash:是如果要更改所选组件,您可以使用
部分的宏。nsh
,请参阅my editWinVer。nsh当前不支持测试嵌入位所需的套件掩码…哎呀,我错过了问题的嵌入部分:(