You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
501 lines
14 KiB
501 lines
14 KiB
; 安装程序初始定义常量
|
|
!define PRODUCT_NAME "千目容器"
|
|
!define PRODUCT_VERSION "V2.1"
|
|
!define PRODUCT_PUBLISHER "千目容器"
|
|
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
|
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
|
|
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"
|
|
|
|
SetCompressor /SOLID lzma
|
|
|
|
; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
|
|
!include "MUI.nsh"
|
|
!include "MUI2.nsh"
|
|
!include "FileFunc.nsh"
|
|
!include "MUI2.nsh"
|
|
!include "WinCore.nsh"
|
|
!include "WinCore.nsh"
|
|
;!include "nsWindows.nsh"
|
|
!include "LogicLib.nsh"
|
|
!include "TextReplace.nsh"
|
|
!include "WordFunc.nsh"
|
|
!include "x64.nsh"
|
|
;!include "WinVer.nsh"
|
|
;!insertmacro MUI_LANGUAGE "simpchinese"
|
|
|
|
|
|
!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
|
|
|
|
; MUI 预定义常量
|
|
!define MUI_ABORTWARNING
|
|
!define MUI_HEADERIMAGE
|
|
|
|
!define MUI_ICON "Sources\1000mu.ico"
|
|
!define MUI_UNICON "Sources\removico1000mu.ico"
|
|
!define MUI_WELCOMEFINISHPAGE_BITMAP "Sources\dlgbmp.bmp"
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "Sources\dlgbmp.bmp"
|
|
|
|
#!define MUI_HEADERIMAGE
|
|
!define MUI_HEADER_TRANSPARENT_TEXT ;文字背景透明
|
|
!define MUI_HEADERIMAGE_BITMAP "Sources\banner.bmp" ;大小 500X60
|
|
#!define MUI_HEADERIMAGE_UNBITMAP "Sources\orange-uninstall.bmp"
|
|
|
|
; ------ 自定义页面 ------
|
|
|
|
Var ipAddress
|
|
Var ipAddress1
|
|
Var ipAddress2
|
|
;Var pic_count
|
|
Var BGImage
|
|
Var MiddleImage ;中间的大Logo
|
|
Var ImageHandle
|
|
Var disk
|
|
Var disk1
|
|
|
|
|
|
|
|
;---------------------------全局编译脚本预定义的常量-----------------------------------------------------
|
|
|
|
; 欢迎页面 --- 这里调整页面顺序 ---
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
; 许可协议页面
|
|
!define MUI_PAGE_HEADER_TEXT "最终用户许可协议"
|
|
|
|
!define MUI_PAGE_HEADER_SUBTEXT "您必须接受此协议才能继续安装!"
|
|
!insertmacro MUI_PAGE_LICENSE "Sources\License.rtf"
|
|
|
|
; 安装目录选择页面
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
|
|
; 组件选择页面
|
|
;!insertmacro MUI_PAGE_COMPONENTS
|
|
|
|
|
|
; 开始菜单设置页面
|
|
var ICONS_GROUP
|
|
!define MUI_STARTMENUPAGE_NODISABLE
|
|
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "千目容器"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
|
|
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
|
|
|
|
; 安装过程页面
|
|
!define MUI_PAGE_CUSTOMFUNCTION_PRE ExtractFiles ;------------------ 安装过程,图片轮训页面
|
|
!define MUI_PAGE_CUSTOMFUNCTION_SHOW CreateStaticRect
|
|
!insertmacro MUI_PAGE_INSTFILES ; 安装过程页面
|
|
|
|
; 安装完成页面
|
|
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
|
|
|
|
; 安装卸载过程页面
|
|
!insertmacro MUI_UNPAGE_WELCOME
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
; 安装界面包含的语言设置
|
|
!insertmacro MUI_LANGUAGE "SimpChinese"
|
|
; 安装预释放文件
|
|
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
|
|
; ------ MUI 现代界面定义结束 ------
|
|
; ------ 自定义页面 ------
|
|
|
|
;多用户安装
|
|
;使用SetShellVarContext all 将快捷方式创建到alluser的开始菜单中
|
|
;SetShellVarContext all
|
|
|
|
;-----------------------------------------------------------------------------------------------
|
|
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
|
OutFile "千目容器1.0.exe"
|
|
InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
|
|
;ShowInstDetails show
|
|
ShowInstDetails NeverShow
|
|
ShowUninstDetails show
|
|
BrandingText "千目容器"
|
|
;获取管理员权限
|
|
RequestExecutionLevel admin
|
|
|
|
|
|
Section "驱动程序" SEC01
|
|
nsExec::Exec "$INSTDIR\Uninstall.bat"
|
|
SetOutPath "$INSTDIR"
|
|
SetOverwrite on
|
|
${WordFind2X} ":$INSTDIR" ":" ":" "-1" $R1 ;提取输入的ip,后面function使用
|
|
StrCpy $disk1 $R1
|
|
; MessageBox MB_OK "$disk1"
|
|
File /r "IOTContainer/*.*"
|
|
; !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
|
; CreateDirectory "AllPass"
|
|
; SetOutPath "$INSTDIR\AllPass.SignalR.Hardware.Client"
|
|
; CreateShortCut "$desktop\启动硬件程序.lnk" "$INSTDIR\AllPass.SignalR.Hardware.Client\硬件程序启动脚本_客户端.bat" ""
|
|
;!insertmacro MUI_STARTMENU_WRITE_END
|
|
SectionIn RO
|
|
SectionEnd
|
|
|
|
|
|
|
|
Section -AdditionalIcons
|
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
|
; MessageBox MB_OK "$INSTDIR"
|
|
; WriteINIStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
|
|
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
|
|
SetOutPath "$INSTDIR\IOTContainer"
|
|
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\千目容器.lnk" "$INSTDIR\IOTContainer\IOTContainer.exe"
|
|
!insertmacro MUI_STARTMENU_WRITE_END
|
|
SectionEnd
|
|
|
|
|
|
|
|
|
|
|
|
Section -Post
|
|
WriteRegStr HKCU "Software\QianMuContainer" "address" $INSTDIR
|
|
WriteUninstaller "$INSTDIR\卸载千目应用.exe"
|
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
|
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\卸载千目应用.exe"
|
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
|
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "http://www.baidu.com"
|
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
|
|
SectionEnd
|
|
|
|
|
|
; ------自定更新IIS配置, web.config 配置
|
|
Section -Main
|
|
DetailPrint "正在安装,请稍等。"
|
|
/*
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
Sleep 10000
|
|
*/
|
|
SectionEnd
|
|
|
|
|
|
|
|
Section "服务程序"
|
|
;WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Run Shell $INSTDIR\硬件驱动及通信程序\AllPass.SignalR.Hardware.Client\硬件程序启动脚本_客户端.bat
|
|
call GetWindowsVersion
|
|
Pop $R0
|
|
${If} $R0 == 'XP'
|
|
;CopyFiles $SMPROGRAMS\$ICONS_GROUP\千目容器.lnk "C:\Documents and Settings\All users\「开始」菜单\程序\启动"
|
|
${ElseIf} $R0 == '2003'
|
|
;CopyFiles $SMPROGRAMS\$ICONS_GROUP\千目容器.lnk "C:\Documents and Settings\All users\「开始」菜单\程序\启动"
|
|
${Else}
|
|
;CopyFiles $SMPROGRAMS\$ICONS_GROUP\千目容器.lnk "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
|
|
${EndIf}
|
|
SectionIn RO
|
|
SectionEnd
|
|
|
|
|
|
; 区段组件描述
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "安装文件"
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${IIS} "驱动安装程序"
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
|
|
|
/******************************
|
|
* 以下是安装程序的卸载部分 *
|
|
******************************/
|
|
|
|
|
|
Section Uninstall
|
|
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
|
|
Delete "$SMPROGRAMS\$ICONS_GROUP\软件卸载.lnk"
|
|
Delete "$SMPROGRAMS\$ICONS_GROUP\启动硬件程序.lnk"
|
|
RMDir /r "$SMPROGRAMS\$ICONS_GROUP"
|
|
delete "C:\Documents and Settings\All users\「开始」菜单\程序\启动\千目容器.lnk"
|
|
delete "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\千目容器.lnk"
|
|
|
|
; ${WordFind2X} "\$INSTDIR" "\" "\" "-1" $R1 ;提取输入的ip,后面function使用
|
|
|
|
SetOutPath "$INSTDIR"
|
|
nsExec::Exec "$INSTDIR\Uninstall.bat"
|
|
RMDir /r "$INSTDIR\IOTContainer"
|
|
RMDir /r "$INSTDIR\log"
|
|
RMDir /r "$INSTDIR"
|
|
delete "$INSTDIR\卸载千目应用.exe"
|
|
DeleteRegKey /ifempty HKCU "Software\QianMuContainer"
|
|
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
|
|
SectionEnd
|
|
|
|
#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
|
|
|
|
Function un.onInit
|
|
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name)及其所有的组件?" IDYES +2
|
|
Abort
|
|
FunctionEnd
|
|
|
|
Function un.onUninstSuccess
|
|
HideWindow
|
|
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
|
|
FunctionEnd
|
|
|
|
;-------------------------------------------------------------------
|
|
|
|
;安装.exe为你想检测的可执行文件
|
|
Function .onInit
|
|
; ------ 自定义页面 ------
|
|
|
|
|
|
${GetDrives} "HDD" "FindHDD"
|
|
ReadRegStr $INSTDIR HKCU \
|
|
"Software\QianMuContainer" address
|
|
${If} $INSTDIR == ''
|
|
StrCpy $INSTDIR $R2Container
|
|
;${Else}
|
|
${EndIf}
|
|
StrCpy $disk $R2
|
|
;${WordFind2X} ":$disk" ":" ":" "-1" $R1 ;提取输入的ip,后面function使用
|
|
;StrCpy $disk1 $R1
|
|
|
|
File `/ONAME=$PLUGINSDIR\sed.exe` `Sources\sed.exe`
|
|
; SectionSetFlags ${autoStart} 0 ; 安装选项,默认勾选 1, 不勾选 0
|
|
#InitPluginsDir
|
|
;创建互斥防止重复运行
|
|
|
|
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "$$OutFile") i .r1 ?e'
|
|
Pop $R0
|
|
StrCmp $R0 0 +3
|
|
MessageBox MB_OK|MB_ICONEXCLAMATION "有一个安装向导已经运行!"
|
|
Abort
|
|
FunctionEnd
|
|
|
|
Function "FindHDD"
|
|
;获取查找到的驱动器盘符($9)可用空间(/D=F)单位兆(/S=M)
|
|
${DriveSpace} $9 "/D=F /S=M" $R0
|
|
${If} $R0 > $R1
|
|
StrCpy $R1 $R0
|
|
StrCpy $R2 $9
|
|
${EndIf}
|
|
Push $0
|
|
FunctionEnd
|
|
|
|
Function GetWindowsVersion
|
|
Push $R0
|
|
Push $R1
|
|
ClearErrors
|
|
ReadRegStr $R0 HKLM \
|
|
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
|
|
IfErrors 0 lbl_winnt
|
|
; we are not NT
|
|
ReadRegStr $R0 HKLM \
|
|
"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
|
|
StrCpy $R1 $R0 1
|
|
StrCmp $R1 '4' 0 lbl_error
|
|
StrCpy $R1 $R0 3
|
|
StrCmp $R1 '4.0' lbl_win32_95
|
|
StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
|
|
lbl_win32_95:
|
|
StrCpy $R0 '95'
|
|
Goto lbl_done
|
|
lbl_win32_98:
|
|
StrCpy $R0 '98'
|
|
Goto lbl_done
|
|
lbl_win32_ME:
|
|
StrCpy $R0 'ME'
|
|
Goto lbl_done
|
|
lbl_winnt:
|
|
StrCpy $R1 $R0 1
|
|
StrCmp $R1 '3' lbl_winnt_x
|
|
StrCmp $R1 '4' lbl_winnt_x
|
|
StrCpy $R1 $R0 3
|
|
StrCmp $R1 '5.0' lbl_winnt_2000
|
|
StrCmp $R1 '5.1' lbl_winnt_XP
|
|
StrCmp $R1 '5.2' lbl_winnt_2003
|
|
StrCmp $R1 '6.0' lbl_winnt_vista
|
|
StrCmp $R1 '6.1' lbl_winnt_win7 lbl_error
|
|
lbl_winnt_x:
|
|
StrCpy $R0 "NT $R0" 6
|
|
Goto lbl_done
|
|
lbl_winnt_2000:
|
|
Strcpy $R0 '2000'
|
|
Goto lbl_done
|
|
lbl_winnt_XP:
|
|
Strcpy $R0 'XP'
|
|
Goto lbl_done
|
|
lbl_winnt_2003:
|
|
Strcpy $R0 '2003'
|
|
Goto lbl_done
|
|
lbl_winnt_vista:
|
|
Strcpy $R0 'Vista'
|
|
Goto lbl_done
|
|
lbl_winnt_win7:
|
|
Strcpy $R0 'Win7'
|
|
Goto lbl_done
|
|
lbl_error:
|
|
Strcpy $R0 ''
|
|
lbl_done:
|
|
Pop $R1
|
|
Exch $R0
|
|
FunctionEnd
|
|
|
|
Function Replacewebconfig ;更改配置文件 web.config
|
|
|
|
ClearErrors
|
|
FileOpen $9 "c:\tmp\replace1.bat" w
|
|
IfErrors done
|
|
FileWrite $9 "@echo off$\r$\n"
|
|
FileWrite $9 "setlocal enabledelayedexpansion$\r$\n"
|
|
FileWrite $9 "set file=$\"$INSTDIR\IOTContainer\ConUpdate.exe.config$\"$\r$\n"
|
|
FileWrite $9 "attrib -H -R %file%$\r$\n"
|
|
FileWrite $9 "copy c:\tmp\sed.exe C:\Windows\System32 /y$logPath$\r$\n"
|
|
FileWrite $9 "$disk1:$\r$\n"
|
|
FileWrite $9 "sed -i $\"s@http://192.168.0.128:8889@$\"$ipAddress$\"@g$\" %file%$logPath$\r$\n"
|
|
|
|
FileWrite $9 "echo ----- sed替换 HRCM web.config 替换库和 url ----- $logPath$\r$\n"
|
|
|
|
FileClose $9
|
|
done:
|
|
${Unless} ${FileExists} "c:\tmp\replace1.bat"
|
|
MessageBox MB_OK|MB_ICONSTOP "0replace1writting web.comfig file error!"
|
|
Abort
|
|
${EndUnless}
|
|
|
|
#ExecWait "c:\tmp\replace1.bat"
|
|
;不显示黑框框
|
|
nsExec::Exec "c:\tmp\replace1.bat"
|
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
|
|
;--------sql server ----------
|
|
|
|
|
|
; Function GetNextIp
|
|
; input: head of stack
|
|
; format: 'ip1;ip2;ip3;ip4;'
|
|
; output: 'ip1' head of stack
|
|
; 'ip2;ip3;ip4;' second entry of stack
|
|
|
|
|
|
|
|
; Function CheckIP
|
|
; input: IP-address on stack
|
|
; output: additional entry on stack
|
|
; 1 - LoopBack IP (localhost, indicates no connection to a LAN or to the internet).
|
|
; 2 - Automatic Private IP Address (no DHCP server).
|
|
; 3 - Network IP.
|
|
; 4 - Internet IP.
|
|
; Eg:
|
|
; Push '192.168.0.100'
|
|
; Call CheckIP
|
|
; Pop $0 ; Contains '3'
|
|
; Pop $1 ; Contains '192.168.0.100'
|
|
|
|
|
|
; Function VersionCheck
|
|
; input: 'v1', 'v2' on stack
|
|
; output 1 - if number 1 is newer
|
|
; 2 - if number 2 is newer
|
|
; 0 - if it is the same verion
|
|
; Eg:
|
|
; Push '3.5.1.4'
|
|
; Push '3.5'
|
|
; Call VersionCheck
|
|
; Pop $0 ; now contains 1
|
|
|
|
;-------------------------
|
|
|
|
|
|
/*
|
|
|
|
Function LEAVE ;按下一步按钮时消隐标题字。图片号+1
|
|
GetDlgItem $0 $HWNDPARENT 1037
|
|
ShowWindow $0 0
|
|
GetDlgItem $0 $HWNDPARENT 1038
|
|
ShowWindow $0 0
|
|
IntOp $pic_count $pic_count + 1
|
|
SetBrandingImage /IMGID=1046 /RESIZETOFIT "$PLUGINSDIR\$pic_count.bmp"
|
|
FunctionEnd
|
|
|
|
Function Back ;按上一步按钮时消隐标题字。图片号-1,如果小于1的话不减了
|
|
GetDlgItem $0 $HWNDPARENT 1037
|
|
ShowWindow $0 0
|
|
GetDlgItem $0 $HWNDPARENT 1038
|
|
ShowWindow $0 0
|
|
IntCmp $pic_count 1 +2 +2 +1
|
|
IntOp $pic_count $pic_count - 1
|
|
SetBrandingImage /IMGID=1046 /RESIZETOFIT "$PLUGINSDIR\$pic_count.bmp"
|
|
FunctionEnd
|
|
|
|
Function GUIINIT
|
|
GetFunctionAddress $R0 Back
|
|
ButtonEvent::AddEventHandler /NOUNLOAD 3 $R0
|
|
|
|
SetOutPath $PLUGINSDIR ;释放图片
|
|
File "Sources\*.bmp"
|
|
|
|
SetBrandingImage /IMGID=1046 /RESIZETOFIT "$PLUGINSDIR\1.bmp" ;先出第一张图片
|
|
StrCpy $pic_count 1 ;图片序号1
|
|
FunctionEnd
|
|
*/
|
|
;---------------------------
|
|
|
|
|
|
;处理无边框移动
|
|
Function onGUICallback
|
|
${If} $MSG = ${WM_LBUTTONDOWN}
|
|
SendMessage $HWNDPARENT ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0
|
|
${EndIf}
|
|
FunctionEnd
|
|
|
|
;------------------------
|
|
|
|
|
|
;------------------------------
|
|
|
|
Function ExtractFiles
|
|
InitPluginsDir
|
|
File /oname=$PLUGINSDIR\index.htm Sources\index.htm
|
|
File /oname=$PLUGINSDIR\1.jpg Sources\1.jpg
|
|
File /oname=$PLUGINSDIR\2.jpg Sources\2.jpg
|
|
File /oname=$PLUGINSDIR\3.jpg Sources\3.jpg
|
|
File /oname=$PLUGINSDIR\4.jpg Sources\4.jpg
|
|
FunctionEnd
|
|
Function CreateStaticRect
|
|
System::Call `*(i,i,i,i)i(0,24,300,116).R0`
|
|
System::Call `user32::MapDialogRect(i$HWNDPARENT,iR0)`
|
|
System::Call `*$R0(i.s,i.s,i.s,i.s)`
|
|
System::Free $R0
|
|
FindWindow $R0 "#32770" "" $HWNDPARENT
|
|
System::Call `user32::CreateWindowEx(i,t"STATIC",in,i${DEFAULT_STYLES}|${SS_BLACKRECT},is,is,is,is,iR0,i1100,in,in)i.R0`
|
|
# 轮换图片效果由 HTML 所实现,此处仅适用插件来显示网页。
|
|
WebCtrl::ShowWebInCtrl $R0 "$PLUGINSDIR/index.htm"
|
|
FunctionEnd
|
|
|
|
|
|
|