?? ejabberd.nsi
字號:
; NSIS Modern User Interface; Ejabberd installation script;--------------------------------;Include Modern UI !include "MUI.nsh" !include "ejabberd.nsh" ; All release specific parameters come from this;--------------------------------;General ;Name and file !define PRODUCT "Ejabberd" Name ${PRODUCT} OutFile "${OUTFILEDIR}\${PRODUCT}-${VERSION}.exe" ShowInstDetails show ShowUninstDetails show !define MUI_ICON "ejabberd.ico" !define MUI_UNICON "ejabberd.ico";--------------------------------;Configuration SetCompressor lzma;--------------------------------;Reserve Files !ifdef HACKED_INSTALLOPTIONS ReserveFile "CheckUserH.ini" ReserveFile "CheckReqs1H.ini" !else ReserveFile "CheckUser.ini" ReserveFile "CheckReqs1.ini" !endif ReserveFile "CheckReqs.ini" ReserveFile "CheckService.ini" !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS;--------------------------------;Variables Var MUI_TEMP Var STARTMENU_FOLDER Var ADMIN Var ENABLE_SERVICE Var ERLANG_PATH Var ERLANG_VERSION Var REQUIRED_ERLANG_VERSION Var OPENSSL_PATH Var OPENSSL_VERSION Var REQUIRED_OPENSSL_VERSION Var ERLSRV;----------------------------------------------------------;.onInit uses UserInfo plugin, so it's as high as possibleFunction .onInit StrCpy $REQUIRED_ERLANG_VERSION "5.3.6.2" StrCpy $REQUIRED_OPENSSL_VERSION "0.9.7c" ;Default installation folder StrCpy $INSTDIR "$PROGRAMFILES\${PRODUCT}" ;Get installation folder from registry if available ClearErrors ReadRegStr $0 HKLM "SOFTWARE\${PRODUCT}" "" IfErrors 0 copydir ReadRegStr $0 HKCU "SOFTWARE\${PRODUCT}" "" IfErrors skipdir copydir: StrCpy $INSTDIR "$0" skipdir: ;Extract InstallOptions INI files !ifdef HACKED_INSTALLOPTIONS !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckUserH.ini" !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs1H.ini" !else !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckUser.ini" !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs1.ini" !endif !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs.ini" !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckService.ini" ClearErrors UserInfo::GetName IfErrors admin Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" admin user admin: StrCpy $ADMIN 1 Goto skip user: StrCpy $ADMIN 0 skip:FunctionEnd;--------------------------------;Interface Settings !define MUI_ABORTWARNING;--------------------------------;Pages !insertmacro MUI_PAGE_WELCOME Page custom CheckUser LeaveCheckUser Page custom CheckService LeaveCheckService !insertmacro MUI_PAGE_LICENSE "..\..\COPYING" Page custom CheckReqs LeaveCheckReqs Page custom CheckReqs1 LeaveCheckReqs1 ;!insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_STARTMENU ${PRODUCT} $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES;--------------------------------;Languages !insertmacro MUI_LANGUAGE "English" ;--------------------------------;Language Strings;Description LangString DESC_SecEjabberd ${LANG_ENGLISH} "Erlang jabber server.";--------------------------------;Installer SectionsSection "Ejabberd" SecEjabberdSectionIn 1 RO SetOutPath "$INSTDIR" File /r "${TESTDIR}\doc" File /r "${TESTDIR}\ebin" File /r "${TESTDIR}\priv" File /r "${TESTDIR}\win32" File "${TESTDIR}\libeay32.dll" File "${TESTDIR}\ssleay32.dll" File /oname=ejabberd.cfg.example "${TESTDIR}\ejabberd.cfg" SetOverwrite off File "${TESTDIR}\ejabberd.cfg" SetOverwrite on ;File /r "${TESTDIR}\src" CreateDirectory "$INSTDIR\log" ;The startmenu stuff !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT} ;Create shortcuts StrCpy $0 "$SMPROGRAMS\$STARTMENU_FOLDER" CreateDirectory "$0" CreateShortCut "$0\Start Ejabberd.lnk" "$ERLANG_PATH\bin\werl.exe" \ '-sname ejabberd -pa ebin \ -env EJABBERD_SO_PATH priv/lib -env EJABBERD_MSGS_PATH msgs \ -env EJABBERD_LOG_PATH log/ejabberd.log \ -s ejabberd -ejabberd config \"ejabberd.cfg\" -mnesia dir \"spool\" \ -sasl sasl_error_logger {file,\"log/sasl.log\"}' \ $INSTDIR\win32\ejabberd.ico CreateShortCut "$0\Edit Config.lnk" "%SystemRoot%\system32\notepad.exe" \ "$INSTDIR\ejabberd.cfg" CreateShortCut "$0\Read Docs.lnk" "$INSTDIR\doc\guide.html" CreateShortCut "$0\Uninstall.lnk" "$INSTDIR\Uninstall.exe" !insertmacro MUI_STARTMENU_WRITE_END;Create Windows service StrCmp $ADMIN 1 0 skipservice StrCpy $ERLSRV "" Push $ERLANG_PATH Push erlsrv.exe GetFunctionAddress $0 FFCallback Push $0 Call FindFiles StrCmp $ERLSRV "" skipservice nsExec::Exec '"$ERLSRV" list ejabberd' Pop $0 StrCmp $0 "error" skipservice StrCmp $0 "0" 0 installsrv nsExec::ExecToLog '"$ERLSRV" remove ejabberd' Pop $0 installsrv: nsExec::ExecToLog '"$ERLSRV" add ejabberd -stopaction "init:stop()." \ -onfail restart -workdir "$INSTDIR" \ -args "-s ejabberd -pa ebin \ -ejabberd config \\\"ejabberd.cfg\\\" \ -env EJABBERD_SO_PATH priv/lib -env EJABBERD_MSGS_PATH msgs \ -env EJABBERD_LOG_PATH log/ejabberd.log \ -sasl sasl_error_logger {file,\\\"log/sasl.log\\\"} \ -mnesia dir \\\"spool\\\"" -d' Pop $0 StrCmp $ENABLE_SERVICE 0 0 skipservice nsExec::ExecToLog '"$ERLSRV" disable ejabberd' Pop $0 skipservice: ;Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" StrCpy $1 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}" StrCmp $ADMIN 1 admin2 WriteRegStr HKCU "Software\${PRODUCT}" "" "$INSTDIR" WriteRegStr HKCU "$1" "DisplayName" "${PRODUCT} ${VERSION}" WriteRegStr HKCU "$1" "UninstallString" "$INSTDIR\Uninstall.exe" WriteRegDWORD HKCU "$1" "NoModify" 1 WriteRegDWORD HKCU "$1" "NoRepair" 1 Goto done2 admin2: WriteRegStr HKLM "Software\${PRODUCT}" "" "$INSTDIR" WriteRegStr HKLM "Software\${PRODUCT}" "Erlsrv" "$ERLSRV" WriteRegStr HKLM "$1" "DisplayName" "${PRODUCT} ${VERSION}" WriteRegStr HKLM "$1" "UninstallString" "$INSTDIR\Uninstall.exe" WriteRegDWORD HKLM "$1" "NoModify" 1 WriteRegDWORD HKLM "$1" "NoRepair" 1 done2:SectionEnd ; SecEjabberdFunction FFCallback Exch $0 StrCpy $ERLSRV $0 Pop $0 Push "stop"FunctionEnd;--------------------------------;Descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecEjabberd} $(DESC_SecEjabberd) !insertmacro MUI_FUNCTION_DESCRIPTION_END ;--------------------------------;Uninstaller SectionSection "Uninstall" ClearErrors UserInfo::GetName IfErrors admin Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" admin StrCpy $ADMIN 0 Goto skipservice admin: StrCpy $ADMIN 1 ReadRegStr $ERLSRV HKLM "Software\${PRODUCT}" "Erlsrv" nsExec::Exec '"$ERLSRV" list ejabberd' Pop $0 StrCmp $0 "error" skipservice StrCmp $0 "0" 0 skipservice nsExec::ExecToLog '"$ERLSRV" remove ejabberd' Pop $0 skipservice: RMDir /r "$INSTDIR\doc" RMDir /r "$INSTDIR\ebin" RMDir /r "$INSTDIR\priv" RMDir /r "$INSTDIR\win32" ;RMDir /r "$INSTDIR\src" RMDir /r "$INSTDIR\log" Delete "$INSTDIR\libeay32.dll" Delete "$INSTDIR\ssleay32.dll" Delete "$INSTDIR\Uninstall.exe" RMDir "$INSTDIR" !insertmacro MUI_STARTMENU_GETFOLDER ${PRODUCT} $MUI_TEMP Delete "$SMPROGRAMS\$MUI_TEMP\Start Ejabberd.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\Edit Config.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\Read Docs.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" ;Delete empty start menu parent diretories StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" startMenuDeleteLoop: RMDir $MUI_TEMP GetFullPathName $MUI_TEMP "$MUI_TEMP\.." IfErrors startMenuDeleteLoopDone StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop startMenuDeleteLoopDone: StrCpy $1 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}" StrCmp $ADMIN 1 admin1 DeleteRegKey HKCU "Software\${PRODUCT}" DeleteRegKey HKCU $1 Goto done admin1: DeleteRegKey HKLM "Software\${PRODUCT}" DeleteRegKey HKLM $1 done:SectionEndLangString TEXT_CU_TITLE ${LANG_ENGLISH} "Checking User Privileges"LangString TEXT_CU_SUBTITLE ${LANG_ENGLISH} "Checking user privileged required to install Ejabberd."Function CheckUser StrCmp $ADMIN 1 0 showpage Abort showpage: !insertmacro MUI_HEADER_TEXT $(TEXT_CU_TITLE) $(TEXT_CU_SUBTITLE) !ifdef HACKED_INSTALLOPTIONS !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckUserH.ini" !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Field 2" "State" GetDlgItem $1 $HWNDPARENT 1 EnableWindow $1 $0 !else !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckUser.ini" !endif !insertmacro MUI_INSTALLOPTIONS_SHOWFunctionEndFunction LeaveCheckUser !ifdef HACKED_INSTALLOPTIONS !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Settings" "State" StrCmp $0 0 validate ;Next button? StrCmp $0 2 checkbox ;checkbox? Abort ;Return to the page checkbox: !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Field 2" "State" GetDlgItem $1 $HWNDPARENT 1 EnableWindow $1 $0 Abort validate: !endifFunctionEndLangString TEXT_CU_TITLE ${LANG_ENGLISH} "Configuring Ejabberd Service"LangString TEXT_CU_SUBTITLE ${LANG_ENGLISH} "Configuring Ejabberd Service."Function CheckService
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -