teleport/dist/client/windows/assist/setup.nsh

509 lines
29 KiB
Plaintext
Raw Normal View History

<EFBFBD><EFBFBD>;=========================================================
; teleport-assist Run-time Package Installer Script.
;=========================================================
;--------------------------------------
; }T<>NL<4E><4C>Spe<70>h<EFBFBD>g
;--------------------------------------
;!ifndef OEM_NAME
; !error "You must define OEM_NAME."
;!endif
;--------------------------------------
; S+T<><>[݋Fh@b<><62>(u0R<30>v4Y<34>e<EFBFBD>N
;--------------------------------------
!include "MUI.nsh"
!include "x64.nsh"
!include "WinVer.nsh"
!include "WordFunc.nsh"
!include "FileFunc.nsh"
;--------------------------------------
; <00>[INыnsi<1A>,g<>v<EFBFBD><76><EFBFBD>Q<EFBFBD>e<EFBFBD>N T<>y
;--------------------------------------
OutFile "..\..\..\..\out\installer\${FILE_NAME_RUNTIMEPAGE}"
Name "$(STR_PRODUCT_NAME_DISPLAY)"
;--------------------------------------
; <00>[IN<49> z<>^<5E>vHr,g<>Oo`[<00>S <09>]
;--------------------------------------
VIProductVersion ${FILE_VER}
VIAddVersionKey "CompanyName" "${COMPANY_NAME}"
VIAddVersionKey "ProductName" "${PRODUCT_NAME_DISPLAY}"
VIAddVersionKey "FileDescription" "${PRODUCT_DESC}"
VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
VIAddVersionKey "FileVersion" "${FILE_VER}"
VIAddVersionKey "ProductVersion" "${FILE_VER}"
;--------------------------------------
; <00>[IN؞<4E><D89E><EFBFBD>[ň_
;--------------------------------------
;InstallDir "$PROGRAMFILES\${TARGET_DIR_BASE}"
InstallDir "$APPDATA\${TARGET_DIR_BASE}"
;--------------------------------------
; <00>[IN؞<4E><D89E><EFBFBD>l<EFBFBD>Qh<51>.<2E><P
;--------------------------------------
InstallDirRegKey HKLM "${TARGET_REG_BASE}" ""
;--------------------------------------
; <00><>n<6E><>TxS}<7D><>[݋Fh<46>vD<76><44>n
;--------------------------------------
!define MUI_UNICON "${SRC_RC_PATH}\uninstall.ico"
!define MUI_ICON "${SRC_RC_PATH}\install.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "${SRC_RC_PATH}\win_inst.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${SRC_RC_PATH}\win_uninst.bmp"
!define MUI_HEADERIMAGE ; Use the header image
!define MUI_HEADERIMAGE_RIGHT ; Put the header image to right.
!define MUI_HEADERIMAGE_BITMAP "${SRC_RC_PATH}\header_inst.bmp"
!define MUI_HEADERIMAGE_UNBITMAP "${SRC_RC_PATH}\header_uninst.bmp"
;--------------------------------------
; <00><>TxS}<7D><> z<><7A><EFBFBD>~<7E>Oo`>f:y_sQ
;--------------------------------------
ShowInstDetails "nevershow"
ShowUninstDetails "nevershow"
;--------------------------------------
;<00><>Bl<42><><>ePO(u<>{tXTCgP<67>
;--------------------------------------
RequestExecutionLevel admin
;--------------------------------------
;<00><>TxS}<7D><00><>QMRf<52>JT
;--------------------------------------
!define MUI_ABORTWARNING
!define MUI_UNABORTWARNING
;<00><>OO<4F> z<>^ <09>(u<>v<EFBFBD><76><00> <0C>\eg(WxS}<7D> z<>^-N<>S<EFBFBD><53>(u0R
!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
!define MUI_LANGDLL_REGISTRY_KEY "${TARGET_REG_BASE}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "InstallLanguageId"
!define MUI_COMPONENTSPAGE_SMALLDESC
;--------------------------------
;<00>XfN<>N<EFBFBD>
;--------------------------------
;Var VAR_TEMP_PATH ;;D<><44>nʑ>e<>v4N<34>e<EFBFBD>vU_
Var VAR_TEMP_SYSWOW64 ;; 64MO<4D>|<7C>~ <00>vsyswow64, 32MO<4D>|<7C>~<7E>vsystem32
Var VAR_TEMP_0
Var VAR_TEMP_1
Var VAR_TEMP_2
;--------------------------------------
; <00>[IN<49><>[݋Fh
;--------------------------------------
; Installer Pages.
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
;--------------------------------------
; <00>[INxS}<7D><>[݋Fh
;--------------------------------------
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;--------------------------------------
; Y<><59><00>/ec
;--------------------------------------
!ifdef _SUPPORT_LANG_SIMPCHINESE
!include "LangSimpChinese.nsh"
!ifndef _SUPPORT_MUTI_LANGS_
!define _LANG 2052
!define _LANG_NAME "SimpChinese"
!endif ;;
!endif
!ifdef _SUPPORT_LANG_ENGLISH
!include "LangEnglish.nsh"
!ifndef _SUPPORT_MUTI_LANGS_
!define _LANG 1033
!define _LANG_NAME "English"
!endif ;;
!endif
!ifdef _SUPPORT_LANG_TRADCHINESE
!include "LangTradChinese.nsh"
!ifndef _SUPPORT_MUTI_LANGS_
!define _LANG 1028
!define _LANG_NAME "TradChinese"
!endif ;;
!endif
!ifdef _SUPPORT_LANG_JAPANESE
!include "LangJapanese.nsh"
!ifndef _SUPPORT_MUTI_LANGS_
!define _LANG 1041
!define _LANG_NAME "Japanese"
!endif ;;
!endif
;--------------------------------
;Reserve Files
;These files should be inserted before other files in the data block
;Keep these lines before any File command
;Only for BZIP2 (solid) compression
ReserveFile "${SRC_RC_PATH}\header_inst.bmp"
!ifdef _SUPPORT_MUTI_LANGS_
!insertmacro MUI_RESERVEFILE_LANGDLL ;LangDLL (language selection dialog)
!endif
;-------------------------------------------------
; <00>b<1D>v^<5E><>e<EFBFBD>N <0C><>Y<EFBFBD>gX[(WR͑}T T
; $R0 -- <00>n<EFBFBD>vU_
; $R1 -- <00>n<EFBFBD>e<EFBFBD>N T
; $R2 -- <00>vh<>vU_
;-------------------------------------------------
;Function CopyAndReplaceFile
; ;MessageBox MB_OK "1:$R0\$R1, 2:$R2"
; SetOverwrite try
; ClearErrors
; CopyFiles /SILENT "$R0\$R1" "$R2"
; IfErrors 0 NO_ERROR
; IfFileExists "$R2\$R1" 0 NO_ERROR
; GetTempFileName $VAR_TEMP_1
; ;MessageBox MB_OK "R0\R1:$R0\$R1 R2:$R2"
; Delete "$VAR_TEMP_1"
; Rename "$R2\$R1" "$VAR_TEMP_1"
; CopyFiles /SILENT "$R0\$R1" "$R2"
; ;
; IfErrors 0 NO_ERROR
; ;MessageBox MB_OK "CopyFiles err"
; Rename "$R0\$R1" "$R2\$R1"
;NO_ERROR:
; Return
;FunctionEnd
Function un.CheckAndRenameFile
IfFileExists "$R2\$R1" 0 NO_ERROR
GetTempFileName $VAR_TEMP_2
Delete $VAR_TEMP_2
Rename "$R2\$R1" "$VAR_TEMP_2"
NO_ERROR:
Return
FunctionEnd
;--------------------------------
; <00>R<>YS
;--------------------------------
Function .onInit
SetOverwrite try
;----------------------------------------------------------------
; <00>S gN*NЏL<D08F><4C>[<5B>O
;----------------------------------------------------------------
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${PRODUCT_GUID}_InstallMutex") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
MessageBox MB_OK|MB_ICONEXCLAMATION $(STR_CHECK_MUTEX) /SD IDOK
Abort
StrCpy $0 "$SYSDIR"
${If} ${RunningX64}
System::Call "kernel32::GetSystemWow64Directory(t .r0, i ${NSIS_MAX_STRLEN})"
${EndIf}
StrCpy $VAR_TEMP_SYSWOW64 $0
;----------------------------------------------------------------
; <00>h<EFBFBD>g/f&T<00><><EFBFBD>͑<EFBFBD>e/T<>R<EFBFBD><52><EFBFBD>{:g
;----------------------------------------------------------------
;----------------------------------------------------------------
; <00>h<EFBFBD>g/f&T/f<>{tXT<58>d\O<>v
; <00><>e<EFBFBD><65><EFBFBD>h<EFBFBD>g/f&T:N<>{tXTCgP<67>
;----------------------------------------------------------------
ClearErrors
UserInfo::GetName
IfErrors OnWin9X
goto OnInitOk
; Pop $0
; UserInfo::GetAccountType
; Pop $1
; StrCmp $1 "Admin" OnInitOk OnInitErr
;----------------------------------------------------------------
;;<03>Ջ<EFBFBD>e<EFBFBD>_
;;MessageBox MB_OK "test onInit11"
;----------------------------------------------------------------
OnInitErr:
MessageBox MB_OK $(STR_CHECK_ADMIN) /SD IDOK
Abort
OnWin9X:
Abort
; We create shortcuts to All users not Current User
OnInitOk:
;SetShellVarContext all
;Abort
;------------------------------------
; <00>h<EFBFBD>g<EFBFBD>d\O<>|<7C>~Hr,g
; /ec<>vgNO<4E>d\O<>|<7C>~/fwin2000
;------------------------------------
${If} ${AtLeastWin2000}
${Else}
MessageBox MB_OK $(STR_CHECK_OSVER) /SD IDOK
Abort
${EndIf}
;------------------------------------
; <00>hKm<4B>eHr,g
; <03>(u<>eHr,g<>vxS}<7D> z<>^xS}<7D><>eHr,g <0C>v^N<>c:y(u7b<37><>eHr,g
;------------------------------------
;<00><><EFBFBD>SHr,g<>S,1Y%<25>-<00>l g<>[ňǏ0 b<>R<EFBFBD>k<EFBFBD><6B>Hr,g
ClearErrors
ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "Version"
StrCmp $R0 "" Label_NotInstalled +1
StrCpy $R1 "${FILE_VER}"
;<00><><EFBFBD>SxS}<7D>W[&{2N <0C><>Y<EFBFBD>g NX[(W <0C><><EFBFBD>f<><>v NhQ
ReadRegStr $VAR_TEMP_0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "UninstallString"
StrCmp $VAR_TEMP_0 "" +1 Label_Isinstalled
goto Label_NotInstalled
Label_Isinstalled:
;<00>k<EFBFBD><6B>Hr,g <0C><>Y<EFBFBD>g$R<>e<00><><EFBFBD>GS<47>~ <0C><>c:y(u7bxS}<7D><>eHr,g
;<00>vI{R<>c:y/f&TxS}<7D> <0C><>]<5D>~<7E><>f<EFBFBD>e<EFBFBD>v<EFBFBD>N<EFBFBD>T<EFBFBD>c:y <20>]<5D>~<7E>
;VersionCompareUage:0(=),1(>),2(<)
;;${VersionCompare} "[Version1]" "[Version2]" $var
;;"[Version1]" ; First version
;;"[Version2]" ; Second version
;;$var ; Result:
;; ; $var=0 Versions are equal
;; ; $var=1 Version1(installed) is newer
;; ; $var=2 Version2(current setup) is newer
${VersionCompare} $R0 $R1 $R2
;;;IntCmp val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]:( =, < , >)
IntCmp $R2 1 Label_NewVerInstalled Label_EquVerInstalled Label_OldVerInstalled
Label_OldVerInstalled:
MessageBox MB_YESNO|MB_ICONQUESTION $(STR_CHECK_OLDVER) /SD IDOK IDNO label_AbortInstall
Exec $VAR_TEMP_0
goto label_AbortInstall
Label_EquVerInstalled:
MessageBox MB_YESNO|MB_ICONQUESTION $(STR_CHECK_EQUVER) /SD IDNO IDNO label_AbortInstall
Exec $VAR_TEMP_0
goto label_AbortInstall
Label_NewVerInstalled:
goto label_AbortInstall
Label_AbortInstall:
abort
Label_NotInstalled:
FunctionEnd
;=================================================================
; <00>[ň:
;=================================================================
Section
ClearErrors
CreateDirectory "$INSTDIR"
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${TARGET_REG_BASE}" "Path" $INSTDIR
WriteRegStr HKLM "${TARGET_REG_BASE}" "Version" ${FILE_VER}
WriteRegStr HKLM "${TARGET_REG_BASE}" "${MUI_LANGDLL_REGISTRY_VALUENAME}" $LANGUAGE
Call InstSoft
; uninstall strings
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "DisplayName" $(STR_UNINSTALL_DISPLAY_NAME)
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "UninstallString" '"$INSTDIR\uninst.exe"'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "Publisher" ${COMPANY_NAME}
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "URLInfoAbout" ${PRODUCT_WEBSITE}
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "DisplayIcon" '"$INSTDIR\${PFNAME_ASSIST}.exe"'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "DisplayVersion" ${FILE_VER}
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "Version" ${FILE_VER}
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}" "NoModify" 0x00000001
SectionEnd
;--------------------------------
; xS}<7D>R<>YS
;--------------------------------
Function un.onInit
ReadRegStr $LANGUAGE HKLM "${TARGET_REG_BASE}" "InstallLanguageId"
;----------------------------------------------------------------
; <00>S gN*NЏL<D08F><4C>[<5B>O
;----------------------------------------------------------------
!ifdef UNINSTALL_COMPONENTS
MessageBox MB_YESNO|MB_ICONQUESTION $(un.STR_UNINSTALL_COMPONENTS) IDYES true IDNO false
false:
Abort
true:
!endif
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${PRODUCT_GUID}_UninstallMutex") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
MessageBox MB_OK|MB_ICONEXCLAMATION $(un.STR_CHECK_MUTEX)
Abort
StrCpy $0 "$SYSDIR"
${If} ${RunningX64}
System::Call "kernel32::GetSystemWow64Directory(t .r0, i ${NSIS_MAX_STRLEN})"
${EndIf}
StrCpy $VAR_TEMP_SYSWOW64 $0
Push $R0
Push $R1
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
;----------------------------------------------------------------
; <00>h<EFBFBD>g/f&T/f<>{tXT<58>d\O<>v
;----------------------------------------------------------------
ClearErrors
UserInfo::GetName
IfErrors OnWin9X
Pop $0
UserInfo::GetAccountType
Pop $1
StrCmp $1 "Admin" OnInitOk OnInitErr
OnInitErr:
MessageBox MB_OK $(un.STR_CHECK_ADMIN)
Abort
OnWin9X:
;Abort
; We create shortcuts to All users not Current User
OnInitOk:
;SetShellVarContext all
;Abort
FunctionEnd
;=================================================================
; xS}<7D>:
;=================================================================
Section "Uninstall"
;------------------------------------
; 1: xS}<7D>
;------------------------------------
SetOutPath $TEMP
Call un.InstSoft
;------------------------------------
; 2: Rd<52><64>l<EFBFBD>Qh<51><68>S<EFBFBD>vU_
; Rd<52><64>l<EFBFBD>Qh<51>HQ Rd<52>,g<>N<EFBFBD>T<EFBFBD>vP[<5B><><EFBFBD>pTARGET_REG_BASE <0C>6qT\Ջ Rd<52>zz<7A>v9h<39><68><EFBFBD>pTARGET_REG_ROOT
;------------------------------------
DeleteRegKey HKLM "${TARGET_REG_BASE}"
DeleteRegKey /ifempty HKLM "${TARGET_REG_ROOT}"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_GUID}"
Delete "$INSTDIR\uninst.exe"
Sleep 1000
; Loop to remove the $INSTDIR.
RMDir /r $INSTDIR
Sleep 1000
GetFullPathName $VAR_TEMP_0 "$INSTDIR\.."
RMDir $VAR_TEMP_0
;Sleep 1000
;RMDir /r "$APPDATA\eomsoft\teleport\assist"
;Sleep 1000
;RMDir "$APPDATA\eomsoft\teleport"
;Sleep 1000
;RMDir "$APPDATA\eomsoft"
SectionEnd
;-------------------------------------------------
; <00>
;-------------------------------------------------
Function InstSoft
;SetOutPath "$APPDATA\eomsoft\teleport\assist\cfg"
;File /r ${SRC_CFG_PATH}\*
SetOutPath "$INSTDIR"
File /r ${SRC_APPS_PATH}\*
;Create shortcuts
CreateShortCut "$DESKTOP\$(STR_DESKTOP_LINK_ASSIST).lnk" "$INSTDIR\${PFNAME_ASSIST}.exe"
CreateDirectory "${START_MENU_ROOT}"
Sleep 1000
CreateDirectory "${START_MENU_BASE}"
CreateShortCut "${START_MENU_BASE}\$(STR_STARTMENU_LINK_ASSIST).lnk" "$INSTDIR\${PFNAME_ASSIST}.exe"
CreateShortCut "${START_MENU_BASE}\$(STR_LINK_UNINSTALLER).lnk" "$INSTDIR\uninst.exe"
${If} ${RunningX64}
SetRegView 64
${EndIf}
; N<><4E>$R<>edkY<><76>V<P <0C><>S<EFBFBD><53><EFBFBD>e<EFBFBD>QeQCgP<67><08>sSO/f<>{tXT<58><54><EFBFBD>NЏL<D08F> <09>0
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "${PRODUCT_NAME_DESC}" "$\"$INSTDIR\${PFNAME_ASSIST}.exe$\""
${If} ${RunningX64}
SetRegView 32
${EndIf}
; start the assist.
Exec "$INSTDIR\${PFNAME_ASSIST}.exe"
FunctionEnd
;-------------------------------------------------
; xS}<7D>
;-------------------------------------------------
Function un.InstSoft
ExecWait "$INSTDIR\${PFNAME_ASSIST}.exe --stop"
;;\Ջ Rd<52> <0C>1Y%<25>R<>O9e T<>y Rd<52>
Sleep 2000
ClearErrors
Delete "$INSTDIR\${PFNAME_ASSIST}.exe"
Sleep 100
IfErrors 0 ON_ERROR_DEL_ASSIST
StrCpy $R2 $INSTDIR
StrCpy $R1 "${PFNAME_ASSIST}.exe"
Call un.CheckAndRenameFile
ON_ERROR_DEL_ASSIST:
ClearErrors
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run\" "${PRODUCT_NAME_DESC}"
Delete "${START_MENU_BASE}\$(STR_LINK_UNINSTALLER).lnk"
Delete "${START_MENU_BASE}\$(STR_STARTMENU_LINK_ASSIST).lnk"
Delete "$DESKTOP\$(STR_DESKTOP_LINK_ASSIST).lnk"
Sleep 1000
RMDir /r "${START_MENU_BASE}"
Sleep 1000
RMDir "${START_MENU_ROOT}"
FunctionEnd
;EOF