0

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

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

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

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

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

这是INI代码:


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

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

[字段 1]
Type=RadioButton
Left=15
Top=28
Right=100
Bottom=38
Text=Internet
State=
Flags=NOTIFY

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

[字段 2]
类型=GroupBox
左=0
上=10
右=300
下=75
文本=

[字段 5]
类型=标签
左=30
上=42
右=235下
=52
文本=对于不在企业 (Exchange) 服务器上的用户

[字段 6]
Type=Label
Left=30
Top=111
Right=235
Bottom=121
Text=仅当您在 Exchange 服务器上时才选择此项

[字段 3]
类型=GroupBox
左=0
上=75
右=300
下=140

[Field 7]
Type=Label
Left=0
Top=0
Right=130
Bottom=10
Text=请选择您的安装方式


...这是 NSI 代码:


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

名称“黑莓桌面”

请求执行级别管理员

一般符号定义
!define VERSION 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 Setup Files"
CRCCheck on
XPStyle on
ShowInstDetails hide
VIProductVersion 5.0.0.11
VIAddVersionKey /LANG=${LANG_ENGLISH} ProductName "BlackBerry Desktop"
VIAddVersionKey /LANG=${LANG_ENGLISH } ProductVersion "${VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} CompanyName "${COMPANY}"
VIAddVersionKey /LANG=${LANG_ENGLISH} CompanyWebsite "${URL}"
VIAddVersionKey /LANG=${LANG_ENGLISH} FileVersion "${ VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} FileDescription ""
VIAddVersionKey /LANG=${LANG_ENGLISH} LegalCopyright ""

安装程序部分
Section /o Main 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!'
部分结束

Section /o Enterprise 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!'
SectionEnd
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 用户安装"

4

2 回答 2

0

你可以从创建一个全局变量开始,Var IsEnterprise或者类似的东西。

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

page EnterprisePageCreate EnterprisePageLeave

EnterprisePageCreate 和 EnterprisePageLeave 应该是 nsis 函数,create 函数应该创建页面, leave 函数应该从单选按钮获取状态并将其保存在全局 $IsEnterprise 中(您可以在 InstallOptions 自述文件中找到有关如何执行此操作的信息和例子)

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

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

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


顺便说一句,仅使用RequestExecutionLevel admin是不够的,当 UAC 关闭或 < Vista 时,您需要使用 UserInfo 插件来检测用户是否为管理员。

于 2009-08-03T18:11:10.470 回答
0

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

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

NSI 代码:

名称“黑莓桌面”

请求执行级别管理员

一般符号定义
!define VERSION 5.0.0.11
!define COMPANY 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
Var Label
Var Label_2
Var Label_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
;Page Custom InstallerSelect InstallerSelectLeave
PageEx custom
PageCallbacks InstallerSelect InstallerSelectLeave
Caption " "
PageExEnd
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
安装程序语言
!insertmacro MUI_LANGUAGE English

安装程序属性
OutFile "RIM_BlackBerry_Desktop_5.0.exe"
InstallDir "$TEMP\RIM BlackBerry Desktop 5.0 Setup Files"
CRCCheck on
XPStyle on
ShowInstDetails hide
VIProductVersion 5.0.0.11
VIAddVersionKey /LANG=${LANG_ENGLISH}
ProductName "BlackBerry Desktop"
VIAddVersionKey /LANG=$ {LANG_ENGLISH}
ProductVersion "${VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH}
CompanyName "${COMPANY}"
VIAddVersionKey /LANG=${LANG_ENGLISH}
CompanyWebsite "${URL}"
VIAddVersionKey /LANG=${LANG_ENGLISH}
FileVersion " ${版本}"
VIAddVersionKey /LANG=${LANG_ENGLISH}
FileDescription "" VIAddVersionKey
/LANG=${LANG_ENGLISH} LegalCopyright ""

;检查管理员功能
Function CheckAdmin
; 检查当前用户是否有管理员权限
userInfo::getAccountType
pop $AccountType
strCmp $AccountType "Admin" +3
messageBox MB_OK "你没有管理员权限。$\n$\n安装取消"
Quit
return
FunctionEnd

;选择安装类型页面函数
Function InstallerSelect
nsDialogs::create 1018
Pop $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>

功能结束

Function InstallerSelectLeave
${NSD_GetState} $RadioButton_1 $RadioButton_1_State
${NSD_GetState} $RadioButton_2 $RadioButton_2_State
FunctionEnd

安装程序部分

Section -Main 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 Internet 0
StrCmp $RadioButton_2_State 1 Enterprise Internet

 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 and Modem Drivers_ENG (DM5.0b28).msi" /passive /norestart'
重命名 "$INSTDIR\Setup_Enterprise.ini" "$INSTDIR\Setup.ini"
睡眠 1000
ExecWait '"$INSTDIR\BlackBerrySetup.exe" /S /v/passive'

结束:
部分结束

安装程序函数
Function .onInit
InitPluginsDir
Push $R1
File /oname=$PLUGINSDIR\spltmp.bmp Blackberry.bmp
advsplash::show 1000 600 400 0x666666 $PLUGINSDIR\spltmp
Pop $R1
Pop $R1 FunctionEnd

于 2009-08-04T18:54:04.663 回答