注意:state是显示的文本或值、Flags是操作相关的,要取值有事件的必须写。
; Ini file generated by the HM NIS Edit IO designer. [Settings] NumFields=8 [Field 1] Type=Groupbox Text=连接到SQL Server Left=0 Right=300 Top=0 Bottom=86 [Field 2] Type=Text State=sa Left=55 Right=282 Top=40 Bottom=52 Flags=WANTRETURN [Field 3] Type=Password State=sa Left=55 Right=282 Top=60 Bottom=75 Flags=WANTRETURN [Field 4] Type=Label Text=登录名: Left=19 Right=51 Top=44 Bottom=52 [Field 5] Type=Label Text=密 码: Left=19 Right=51 Top=65 Bottom=75 [Field 6] Type=Button Text=测试连接 Left=0 Right=299 Top=92 Bottom=108 Flags=NOTIFY [Field 7] Type=Label Text=服务器: Left=19 Right=51 Top=25 Bottom=35 [Field 8] Type=Text Flags=READONLY State=本地服务器 Left=56 Right=282 Top=22 Bottom=35 2、将这个界面放到欢迎界面之后,代码如下: ; ------ 自定义页面 ------ Var hwnd ; 自定义页面的窗口句柄 Var SQL_SERVERNAME # 服务器名 例如: server ; user5 ...... 通常是计算机名 Var SQL_LOGINNAME # 登陆名 例如: sa ..... SQLServer 安全性属性那里的用户名 Var SQL_LOGINPASSWORD # 登陆密码, 如果你用的是 sa 登陆,这里就要 sa 的密码 Var SQL_isql_DIR # isql.exe 的所在位置 ; 欢迎页面 !insertmacro MUI_PAGE_WELCOME Page custom PageInitFunc PageLeaveFunc # 自定义页面 ,这里一个是初始化的方法,一个时离开时的方法 ; 安装过程页面 !insertmacro MUI_PAGE_INSTFILES ; 安装完成页面 !define MUI_FINISHPAGE_RUN "$INSTDIR\YHK2005.exe" !insertmacro MUI_PAGE_FINISH ; 安装卸载过程页面 !insertmacro MUI_UNPAGE_INSTFILES ; 安装界面包含的语言设置 !insertmacro MUI_LANGUAGE "SimpChinese" ;这里是生成的代码(非自定义界面的) Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "${INSTALL_NAME}.exe" InstallDir "${INSTALL_DIR}" ShowInstDetails show ShowUnInstDetails show BrandingText "${INSTALL_WATER}" ; ------ 自定义页面 ------ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll" ReserveFile "C:\Documents and Settings\Administrator\桌面\Link2SQL.ini" ;安装.exe为你想检测的可执行文件 Function .onInit ; ------ 自定义页面 ------ InitPluginsDir File /oname=$PLUGINSDIR\Link2SQL.ini "C:\Documents and Settings\Administrator\桌面\Link2SQL.ini" FunctionEnd Function PageInitFunc SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:数据库配置" !insertmacro MUI_HEADER_TEXT "连接数据库" "执行与数据库相关的操作,需要登录数据库的用户名及密码" ;通过宏 MUI_HEADER_TEXT 设置页面页眉 GetDlgItem $0 $HWNDPARENT 1 EnableWindow $0 0 ;注册表中读取计算机名称 ReadRegStr $SQL_SERVERNAME HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName" WriteINIStr "$PLUGINSDIR\Link2SQL.ini" "Field 8" "State" "$SQL_SERVERNAME" InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\Link2SQL.ini" Pop $hwnd ; 获取自定义页面的窗口句柄 InstallOptions::show ; 显示自定义页面 Pop $0 FunctionEnd Function PageLeaveFunc ReadINIStr $0 "$PLUGINSDIR\Link2SQL.ini" "Settings" "State" ; 读取那个控件正在使用 state 就是 Field 后面的序数 StrCmp $0 0 NextBtn ; 点击下一步按钮 StrCmp $0 6 TestLinkBtn ; 点击 测试连接按钮 -- 6 为控件的 FieldNum Goto NextBtn TestLinkBtn: ReadINIStr $SQL_LOGINNAME "$PLUGINSDIR\Link2SQL.ini" "Field 2" "State" ; 获取用户名的状态 ReadINIStr $SQL_LOGINPASSWORD "$PLUGINSDIR\Link2SQL.ini" "Field 3" "State" ; 获取密码的状态 ReadRegStr $SQL_isql_DIR HKLM "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup" "SQLPath" nsExec::ExecToStack `"$SQL_isql_DIR\Binn\isql" -S$SQL_SERVERNAME -U$SQL_LOGINNAME -P$SQL_LOGINPASSWORD -Q"select 'ok'" -o$PLUGINSDIR\result.txt` # 这里只是简单的测试返回值 $0 为 0 则连接通过, 为其他值则连接出错,证明账号密码等参数输入错误, 这里只是很简单的检测,较为安全的操作是读取 result.txt 文件,如果里面第 3 行 显示为 ok 则连接正常且顺利运行了一个 SQL 语句。 Pop $0 StrCmp $0 0 pass MessageBox MB_OK "连接错误,请重新输入连接信息,否则无法进行后面的操作!" Abort pass: MessageBox MB_OK "连接成功!" GetDlgItem $0 $HWNDPARENT 1 EnableWindow $0 1 Abort ; 禁止进入下一页面,因为点击的并不是“下一步”按钮 NextBtn: FunctionEnd
点击测试连接后,连接正确后 安装可以用,断续安装。