【问题标题】:Custom radio-button INI page via Eclipse通过 Eclipse 自定义单选按钮 INI 页面
【发布时间】:2009-08-03 17:03:25
【问题描述】:

我正在使用 Eclipse 的 create InstallOptions 菜单创建一个带有单选按钮的自定义 INI 页面,用于重新打包 Blackberry Desktop 安装程序。

每种类型有 2 个部分:“Internet”和“企业”。

我需要用户选择 2 个选项中的 1 个,根据他们的选择,该页面将继承在自定义页面中选择的选项,跳转到 INSTFILES 页面,然后继续到最后。

我找不到任何关于让 INI 页面加载到脚本中的具体文档(我可能搜索不正确),然后将数据从一个页面传递到下一个页面(根据我猜的字段?)

感谢任何帮助。即使是告诉我我是盲人并且无法阅读文档(尽管链接会有所帮助:))

这是 INI 代码:


;由 EclipseNSIS InstallOptions 脚本向导自动生成
; 2009 年 7 月 29 日下午 5:42:56

[设置]
NumFields=7
Title=RIM BlackBerry Desktop 5.0 安装
CancelEnabled=1

[字段 1]
类型=单选按钮
左=15
顶部=28
右=100
底部=38
文本=互联网
状态=
标志=通知

[字段 4]
类型=单选按钮
左=15
顶部=95
右=100
底部=105
文本=企业
标志=通知

[字段 2]
类型=组框
左=0
顶部=10
右=300
底部=75
文字=

[字段 5]
类型=标签
左=30
顶部=42
右=235
底部=52
Text=适用于不在企业 (Exchange) 服务器上的用户

[字段 6]
类型=标签
左=30
顶部=111
右=235
底部=121
Text=仅当您在 Exchange 服务器上时才选择此项

[字段 3]
类型=组框
左=0
顶部=75
右=300
底部=140

[字段 7]
类型=标签
左=0
顶部=0
右=130
底部=10
Text=请选择您的安装方式


...这是 NSI 代码:


由 EclipseNSIS 脚本向导自动生成
2009 年 7 月 29 日下午 5:42:16

命名为“黑莓桌面”

RequestExecutionLevel 管理员

一般符号定义
!define 版本 5.0.0.11
!define COMPANY RIM
!define URL http://www.blackberry.com

MUI 符号定义
!define MUI_ICON BBD.ico
!define MUI_LICENSEPAGE_RADIOBUTTONS

包含的文件
!include Sections.nsh
!include MUI2.nsh

保留文件
ReserveFile "${NSISDIR}\Plugins\AdvSplash.dll"

安装程序页面
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE license.txt
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
安装程序语言
!insertmacro MUI_LANGUAGE 英语

安装程序属性
OutFile RIM_BlackBerry_Desktop_5.0.exe
InstallDir "$TEMP\RIM BlackBerry Desktop 5.0 安装文件"
CRC校验开启
XPStyle on
ShowInstDetails 隐藏
VIProductVersion 5.0.0.11
VIAddVersionKey /LANG=${LANG_ENGLISH} 产品名称“黑莓桌面”
VIAddVersionKey /LANG=${LANG_ENGLISH} ProductVersion "${VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} 公司名称“${COMPANY}”
VIAddVersionKey /LANG=${LANG_ENGLISH} 公司网站 "${URL}"
VIAddVersionKey /LANG=${LANG_ENGLISH} FileVersion "${VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} 文件描述 ""
VIAddVersionKey /LANG=${LANG_ENGLISH} LegalCopyright ""

安装程序部分
部分 /o 主要 SEC0000
SetOutPath $INSTDIR
SetOverwrite ifdiff
;测试阶段
部分结束

SectionGroup /e "BlackBerry 桌面部分"
Section /o Internet SEC0001
SetOutPath $INSTDIR\DRIVERS
SetOverwrite ifdiff
; Execwait 'msiexec /i "$INSTDIR\BlackBerry USB and Modem Drivers_ENG (DM5.0b28).msi" /passive'
SetOutPath $INSTDIR
SetOverwrite ifdiff
;文件 /r *
; ExecWait '"$INSTDIR\Setup.exe" /S/v/qb!'
部分结束

部分 /o 企业 SEC0002
SetOutPath $INSTDIR\DRIVERS
SetOverwrite ifdiff
; Execwait 'msiexec /i "$INSTDIR\BlackBerry USB and Modem Drivers_ENG (DM5.0b28).msi" /passive'
SetOutPath $INSTDIR
SetOverwrite ifdiff
;文件 /r *
;删除 /REBOOTOK "$INSTDIR\Setup.ini"
;重命名 /REBOOTOK "$INSTDIR\Setup_Enterprise.ini" "$INSTDIR\Setup.ini"
; ExecWait '"$INSTDIR\Setup.exe" /S/v/qb!'
部分结束
SectionGroupEnd

部分说明
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC0000} $(SEC0000_DESC)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC0001} $(SEC0001_DESC)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

安装程序语言字符串
TODO 使用适当的翻译更新语言字符串。

LangString SEC0000_DESC ${LANG_ENGLISH} "为非 Exchange/Enterprise BlackBerry 用户安装"
LangString SEC0001_DESC ${LANG_ENGLISH} "Exchange/Enterprise BlackBerry 用户安装"

【问题讨论】:

    标签: eclipse custom-controls nsis


    【解决方案1】:

    您可以从使用Var IsEnterprise 或类似的东西创建一个全局变量开始。

    要使实际页面正常工作,您可以在现有 MUI_PAGE 宏之间的某处插入一个页面命令

    page EnterprisePageCreate EnterprisePageLeave
    

    EnterprisePageCreate 和 EnterprisePageLeave 应该是 nsis 函数,create 函数应该创建页面,而 leave 函数应该从单选按钮获取状态并将其保存在您的全局 $IsEnterprise 中(您可以在InstallOptions 自述文件和示例)

    然后你可以在一个部分中使用 $IsEnterprise。

    但由于您已经有一个名为 Enterprise 的部分,我假设您只想切换此部分。如果是这种情况,则无需将状态保存在 var 中,您可以使用 EnterprisePageLeave 函数中sections.nsh 中的宏切换“复选框”部分。

    您还提到您要跳转到 InstFiles 页面,查看您发布的脚本,我只是将自定义页面放在组件页面之前,当企业收音机打开时,打开该部分,否则,打开它关闭并使其只读。


    顺便说一句,仅仅使用RequestExecutionLevel admin是不够的,当UAC关闭或

    【讨论】:

    • 我也在研究 nsDialogs。与 InstallOptions 有很大不同,但据说可以使用 INI。我的功能已关闭并正常工作,但只需要它获取 GetState 变量并将它们传递给我为 Internet/Enterprise 提供的部分。
    【解决方案2】:

    最终使用 nsDialogs。没有 GUI,但从设计的角度来看似乎有更多的控制权。

    单选按钮页面可以正常工作,只是它在安装程序运行时显示带有“许可协议”子标题的自定义页面。

    NSI 代码:

    命名为“黑莓桌面”

    RequestExecutionLevel 管理员

    一般符号定义
    !define 版本 5.0.0.11
    !define 公司 RIM
    !define URL http://www.blackberry.com

    MUI 符号定义
    !define MUI_ICON Blackberry.ico
    !define MUI_LICENSEPAGE_RADIOBUTTONS

    包含的文件
    !include Sections.nsh
    !include MUI2.nsh
    !include nsDialogs.nsh
    !include LogicLib.nsh

    变量 Var /GLOBAL AccountType
    Var InstallerSelect
    变量标签
    变量标签_2
    变量标签_3
    Var RadioButton_1
    Var RadioButton_2
    Var /GLOBAL RadioButton_1_State
    Var /GLOBAL RadioButton_2_State

    保留文件
    ReserveFile "${NSISDIR}\Plugins\AdvSplash.dll"

    安装程序页面
    !insertmacro MUI_PAGE_WELCOME
    !insertmacro MUI_PAGE_LICENSE license.txt
    ;页面自定义 InstallerSelect InstallerSelectLeave
    PageEx 自定义
    PageCallbacks InstallerSelect InstallerSelectLeave
    标题 " "
    PageExEnd
    !insertmacro MUI_PAGE_INSTFILES
    !insertmacro MUI_PAGE_FINISH
    安装程序语言
    !insertmacro MUI_LANGUAGE 英语

    安装程序属性
    OutFile "RIM_BlackBerry_Desktop_5.0.exe"
    InstallDir "$TEMP\RIM BlackBerry Desktop 5.0 安装文件"

    上的 CRCCheck
    上的 XPStyle ShowInstDetails 隐藏
    VIProductVersion 5.0.0.11
    VIAddVersionKey /LANG=${LANG_ENGLISH}
    产品名称“黑莓桌面”
    VIAddVersionKey /LANG=${LANG_ENGLISH}
    ProductVersion "${VERSION}"
    VIAddVersionKey /LANG=${LANG_ENGLISH}
    公司名称“${COMPANY}”
    VIAddVersionKey /LANG=${LANG_ENGLISH}
    公司网站“${URL}”
    VIAddVersionKey /LANG=${LANG_ENGLISH}
    文件版本 "${VERSION}"
    VIAddVersionKey /LANG=${LANG_ENGLISH}
    FileDescription "" VIAddVersionKey
    /LANG=${LANG_ENGLISH} 法律版权 ""

    ;检查管理功能
    功能检查管理
    ;检查当前用户是否有管理员权限
    用户信息::getAccountType
    弹出 $AccountType
    strCmp $AccountType "管理员" +3
    messageBox MB_OK "您没有管理员权限。$\n$\n安装已取消"
    退出
    返回
    函数结束

    ;选择安装类型的页面功能
    功能安装程序选择
    nsDialogs::create 1018
    弹出 $InstallerSelect

        ${If} $InstallerSelect == error <br>
                Abort <br>
        ${EndIf} <br>
    
        ${NSD_CreateLabel} 0 0 100% 12u "Please select an installation type..." <br>
        Pop $Label <br>
    
        ${NSD_CreateLabel} 10% 30% 90% 20 "For users who are NOT on the Enterprise (Exchange) server" <br>
        Pop $Label_2 <br>
    
        ${NSD_CreateLabel} 10% 70% 90% 20 "For users who are on the Enterprise (Exchange) server" <br>
        Pop $Label_3         <br>
    
        ${NSD_CreateRadioButton} 5% 20% 100% 20 "Internet" <br>
        Pop $RadioButton_1 <br>
    
        ${NSD_CreateRadioButton} 5% 60% 100% 20 "Enterprise" <br>
        Pop $RadioButton_2 <br>
    
        ${If} $RadioButton_1_State == ${BST_CHECKED} <br>
                ${NSD_Check} $RadioButton_1 <br>
        ${EndIf}  <br>
    
        ${If} $RadioButton_2_State == ${BST_CHECKED} <br>
                ${NSD_Check} $RadioButton_2 <br>
        ${EndIf} <br>
    
        nsDialogs::Show  <br>
    

    函数结束

    函数安装程序选择离开
    ${NSD_GetState} $RadioButton_1 $RadioButton_1_State
    ${NSD_GetState} $RadioButton_2 $RadioButton_2_State
    函数结束

    安装程序部分

    部分 - 主 SEC0000
    致电 CheckAdmin

    SetOutPath $INSTDIR\BB_MS
    SetOverwrite ifdiff
    File /r BB_MS\*
    SetOutPath $INSTDIR\Drivers
    SetOverwrite ifdiff
    File /r DRIVERS\*
    SetOutPath $INSTDIR\ISSetupPrerequisites
    SetOverwrite ifdiff
    File /r ISSetupPrerequisites\*
    SetOutPath $INSTDIR
    SetOverwrite ifdiff
    File "_setup.exe"
    File "0x0409.ini"
    File "Autorun.inf"
    File "BBDMUtil.dll"
    File "BlackBerry Desktop Software.msi"
    File "BlackBerrySetup.exe"
    File "Data1.cab"
    File "FLEXnet_patch_Q113020.exe"
    File "install.txt"
    File "install_ENT_silent.cmd"
    File "install_ENT_ui.cmd"
    File "install_INT_silent.cmd"
    File "install_INT_ui.cmd"
    File "setup.bmp"
    File "Setup_Internet.ini"
    File "Setup_Enterprise.ini"
    File "WindowsInstaller-KB893803-x86.exe"
    

    ;检查选择的安装方法
    StrCmp $RadioButton_1_State 1 互联网 0
    StrCmp $RadioButton_2_State 1 企业互联网

     Internet: <br>
    Execwait 'msiexec /i "$INSTDIR\Drivers\BlackBerry USB and Modem Drivers_ENG (DM5.0b28).msi" /passive /norestart' <br>
    Rename "$INSTDIR\Setup_Internet.ini" "$INSTDIR\Setup.ini" <br>
    Sleep 1000 <br>
    ExecWait '"$INSTDIR\BlackBerrySetup.exe" /S /v/passive' <br>
        Goto End <br>
    

    企业:
    Execwait 'msiexec /i "$INSTDIR\Drivers\BlackBerry USB 和调制解调器 Drivers_ENG (DM5.0b28).msi" /passive /norestart'
    重命名 "$INSTDIR\Setup_Enterprise.ini" "$INSTDIR\Setup.ini"
    睡眠 1000
    ExecWait '"$INSTDIR\BlackBerrySetup.exe" /S /v/passive'

    结束:
    部分结束

    安装程序功能
    函数 .onInit
    初始化插件目录
    推 $R1
    文件 /oname=$PLUGINSDIR\spltmp.bmp Blackberry.bmp
    advsplash::show 1000 600 400 0x666666 $PLUGINSDIR\spltmp
    流行 $R1
    弹出 $R1 FunctionEnd

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2021-04-23
      • 2018-10-08
      • 2015-08-16
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多