home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Enigma / Enigma-1.01-w7.exe / enigma.nsi < prev    next >
Text File  |  2009-12-13  |  12KB  |  329 lines

  1. ;Based on: NSIS Modern User Interface - "Multilingual Example Script" Written by Joost Verburg
  2.  
  3. ;===================================================
  4. ;Include Modern UI
  5.   !include "MUI.nsh"
  6. ;Include NSIS Logic Library
  7.   !include 'LogicLib.nsh'
  8. ;Include Word Functions Header
  9.   !include "WordFunc.nsh"
  10.   !insertmacro WordReplace
  11.   !insertmacro WordAdd
  12.   !insertmacro un.WordReplace
  13.   !insertmacro un.WordAdd
  14.  
  15. ;===================================================
  16. ;General
  17.  
  18.   !define NAME "Enigma"
  19.   !define COMPANY "Enigma Devel"
  20.   !define WEBSITE "http://www.nongnu.org/enigma"
  21.   !define VERSION "1.01"
  22.   !define VERSION4 "${VERSION}.0.0" ; x.x.x.x
  23.   !define LEGALCOPYRIGHT "Program is under GPL license"
  24.   !define INSTALLER_REGISTRY_ROOT "HKLM"
  25.   !define INSTALLER_REGISTRY_KEY "Software\Enigma"
  26.  
  27.   ; Source directory
  28.   !define SDIR ".\"
  29.  
  30.   ;Name and file
  31.   Name "${NAME} ${VERSION}"
  32.   OutFile "Enigma-${VERSION}.exe"
  33.   SetCompressor /SOLID lzma
  34.  
  35.   ;Default installation folder
  36.   InstallDir "$PROGRAMFILES\Enigma"
  37.   ;InstallDirRegKey ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "Install_Dir" ; this is handled with in .oninit
  38.   
  39.   ;Vista redirects $SMPROGRAMS to all users without this
  40.   RequestExecutionLevel admin
  41.  
  42. ;===================================================
  43. ;Variables
  44.  
  45.   Var MUI_TEMP
  46.   Var STARTMENU_FOLDER
  47.  
  48. ;===================================================
  49. ;Interface Settings
  50.  
  51.   !define MUI_ABORTWARNING
  52.   !define MUI_WELCOMEFINISHPAGE_BITMAP "enigma-inst-welcome.bmp" ;164x314 bmp
  53.   !define MUI_UNWELCOMEFINISHPAGE_BITMAP "enigma-inst-welcome.bmp"
  54.   ; !define MUI_TEXT_WELCOME_INFO_TEXT "text"
  55.   !define MUI_WELCOMEPAGE_TEXT "$(ProgramDesc)\r\n\r\n$(^ClickNext)"
  56.   !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-blue-full.ico"
  57.   !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-blue-full.ico"
  58.  
  59. ;===================================================
  60. ;Language Selection Dialog Settings
  61.  
  62.   ;Remember the installer language
  63.   !define MUI_LANGDLL_REGISTRY_ROOT ${INSTALLER_REGISTRY_ROOT}
  64.   !define MUI_LANGDLL_REGISTRY_KEY ${INSTALLER_REGISTRY_KEY}
  65.   !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
  66.   !define MUI_LANGDLL_ALWAYSSHOW
  67.  
  68. ;===================================================
  69. ;Pages
  70.  
  71.   !define MUI_PAGE_CUSTOMFUNCTION_PRE WelcomePagePre ; hack for link on welcomepage
  72.   !define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageShow
  73.   !insertmacro MUI_PAGE_WELCOME
  74.   ; !insertmacro MUI_PAGE_COMPONENTS ; There's currently only 1 component, so we don't need this
  75.   
  76.   !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryPageLeave
  77.   !insertmacro MUI_PAGE_DIRECTORY
  78.   
  79.   ;Start Menu Folder Page Configuration
  80.   !define MUI_STARTMENUPAGE_REGISTRY_ROOT "${INSTALLER_REGISTRY_ROOT}"
  81.   !define MUI_STARTMENUPAGE_REGISTRY_KEY "${INSTALLER_REGISTRY_KEY}"
  82.   !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
  83.   !define MUI_STARTMENUPAGE_DEFAULTFOLDER "Enigma"
  84.   
  85.   !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
  86.  
  87.   ;Page that asks for creating an icon on the desktop
  88.   Page custom CustomOptionsPage
  89.  
  90.   !insertmacro MUI_PAGE_INSTFILES
  91.  
  92.   ;finish page configuration
  93.   !define MUI_FINISHPAGE_RUN enigma.exe
  94.   ;MUI_FINISHPAGE_RUN_TEXT "text"
  95.   !define MUI_FINISHPAGE_RUN_NOTCHECKED
  96.  
  97.   !insertmacro MUI_PAGE_FINISH
  98.   
  99.   !insertmacro MUI_UNPAGE_WELCOME
  100.   ; !insertmacro MUI_UNPAGE_CONFIRM
  101.   !insertmacro MUI_UNPAGE_DIRECTORY
  102.   UninstPage custom Un.CustomOptionsPage
  103.   !insertmacro MUI_UNPAGE_INSTFILES
  104.   !insertmacro MUI_UNPAGE_FINISH
  105.  
  106. ;===================================================
  107. ;Languages
  108.  
  109.   !include "enigma-inst-lang.nsh"
  110.  
  111.  
  112. ;===================================================
  113. ;Reserve Files
  114.   
  115.   ;If you are using solid compression, files that are required before
  116.   ;the actual installation should be stored first in the data block,
  117.   ;because this will make your installer start faster.
  118.   
  119.   ReserveFile "enigma-inst-welcome.bmp"
  120.   ReserveFile "enigma-inst-opt.ini"
  121.   !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
  122.   !insertmacro MUI_RESERVEFILE_LANGDLL
  123.  
  124. ;===================================================
  125. ;Installer Sections
  126.  
  127. Section "Enigma"
  128. SectionIn RO
  129.   ; install for all users
  130.   SetShellVarContext all
  131.   ; Set output path to the installation directory.
  132.   SetOutPath $INSTDIR
  133.   RMDir /r "$INSTDIR" ; delete the inst. dir. with all its contents
  134.   ; Add files
  135.   File /r "${SDIR}\data"
  136.   File /r "${SDIR}\images"
  137.   File /r "${SDIR}\manual"
  138.   File /r "${SDIR}\reference"
  139.   File    "${SDIR}\*.*"
  140.  
  141.   ; Write the installation path into the registry
  142.   WriteRegStr ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "LastDirectory" "$INSTDIR"
  143.   ; Write the uninstall keys for Windows
  144.   Var /GLOBAL UninstallRegKey
  145.   StrCpy $UninstallRegKey "Software\Microsoft\Windows\CurrentVersion\Uninstall\Enigma"
  146.   WriteRegStr HKLM $UninstallRegKey "DisplayName" "Enigma"
  147.   WriteRegStr HKLM $UninstallRegKey "UninstallString" '"$INSTDIR\uninstall.exe"'
  148.   WriteRegStr HKLM $UninstallRegKey "InstallLocation" "$INSTDIR"
  149.   WriteRegStr HKLM $UninstallRegKey "Publisher" "${COMPANY}"
  150.   WriteRegStr HKLM $UninstallRegKey "URLInfoAbout" "${WEBSITE}"
  151.   WriteRegStr HKLM $UninstallRegKey "DisplayVersion" "${VERSION}"
  152.   WriteRegDWORD HKLM $UninstallRegKey "NoModify" 1
  153.   WriteRegDWORD HKLM $UninstallRegKey "NoRepair" 1
  154.  
  155.   WriteUninstaller "uninstall.exe"
  156.  
  157.   !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  158.     CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
  159.     CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Enigma.lnk" "$INSTDIR\enigma.exe"
  160.     CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Documentation.lnk" "$INSTDIR\index.html"
  161.     CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\uninstall.exe"
  162.   !insertmacro MUI_STARTMENU_WRITE_END
  163.  
  164.   ;Read a value from an InstallOptions INI file
  165.   !insertmacro MUI_INSTALLOPTIONS_READ $R1 "enigma-inst-opt.ini" "Field 1" "State"
  166.   
  167.   ;Create desktop shortcut if check box was checked
  168.   StrCmp $R1 "1" "" +2
  169.      CreateShortCut "$DESKTOP\Enigma.lnk" "$INSTDIR\enigma.exe" "" "$INSTDIR\enigma.exe" 0
  170.  
  171.   ; the following code adds the version + inst. directory to the list of all Enigma installations
  172.   ReadRegStr $R2 ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "DirectoriesList"
  173.   ${WordAdd} "$R2" "|" "+${VERSION}:$INSTDIR" $R3
  174.   WriteRegStr ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "DirectoriesList" $R3
  175.  
  176. SectionEnd
  177.  
  178. ;===================================================
  179. ;Installer Functions
  180.  
  181. Function .onInit
  182.  
  183.   !insertmacro MUI_LANGDLL_DISPLAY
  184.   ;Extract InstallOptions INI files
  185.   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "enigma-inst-opt.ini"
  186.  
  187.   ReadRegStr $R4 ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "Install_Dir" ; key used prior to version 1.01
  188.   ReadRegStr $R5 ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "LastDirectory"
  189.  
  190.   ;Get installation folder from registry if available
  191.   ${If} $R5 != ""
  192.     StrCpy $INSTDIR $R5
  193.   ${ElseIf} $R4 != ""
  194.     StrCpy $INSTDIR $R4
  195.   ${EndIf}
  196.  
  197. FunctionEnd
  198.  
  199. Function CustomOptionsPage
  200.   !insertmacro MUI_INSTALLOPTIONS_WRITE "enigma-inst-opt.ini" "Field 1" "Text" $(DesktopIcon)
  201.   !insertmacro MUI_INSTALLOPTIONS_WRITE "enigma-inst-opt.ini" "Field 2" "Text" $(^ClickInstall)
  202.   ${WordReplace} $(^ComponentsSubCaption) ": " "" "+" $R0
  203.   !insertmacro MUI_HEADER_TEXT $R0 "$(^ComponentsSubText2_NoInstTypes)"
  204.   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "enigma-inst-opt.ini"
  205. FunctionEnd
  206.  
  207. Function WelcomePagePre
  208.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" "175"
  209.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Type" "Link"
  210.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Text" "www.enigma-game.org"
  211.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Left" "120"
  212.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Right" "315"
  213.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" "175"
  214.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" "185"
  215.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" ${WEBSITE}
  216.    !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" "4"
  217. FunctionEnd
  218.  
  219. Function WelcomePageShow
  220.   ; Thanks to pengyou ; Fix colors of added link control ; See http://forums.winamp.com/showthread.php?s=&threadid=205674
  221.   Push $0
  222.   GetDlgItem $0 $MUI_HWND 1203
  223.   SetCtlColors $0 "0000FF" "FFFFFF"
  224.   CreateFont $1 "$(^Font)" "$(^FontSize)" "400" /UNDERLINE
  225.   SendMessage $0 ${WM_SETFONT} $1 1 
  226.   Pop $0
  227. FunctionEnd
  228.  
  229. Function DirectoryPageLeave
  230.    IfFileExists $INSTDIR\*.* FolderExists endfunction
  231.    FolderExists:
  232.       IfFileExists $INSTDIR\Enigma.exe FileDoesExist FileDoesNotexist
  233.       FileDoesExist:
  234.         MessageBox MB_YESNO|MB_DEFBUTTON2 "$(OldInstallSure) $(OldInstallDesc) $(OldInstallDesc2)" IDYES endfunction IDNO clickno
  235.       FileDoesNotexist:
  236.         MessageBox MB_YESNO|MB_DEFBUTTON2 "$(OldInstallMaybe) $(OldInstallDesc)" IDYES endfunction IDNO clickno
  237.    clickno:
  238.     Abort
  239.    endfunction:
  240. FunctionEnd
  241.  
  242. ;===================================================
  243. ;Uninstaller Section
  244.  
  245. Section "Uninstall"
  246.  
  247.   ; uninstall for all users
  248.   SetShellVarContext all
  249.  
  250.   ; remove start-menu items
  251.   !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
  252.  
  253.   Delete "$SMPROGRAMS\$MUI_TEMP\Enigma.lnk"
  254.   Delete "$SMPROGRAMS\$MUI_TEMP\Documentation.lnk"
  255.   Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
  256.   
  257.   ;Delete empty start menu parent directories
  258.   StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
  259.   startMenuDeleteLoop:
  260.     ClearErrors
  261.     RMDir $MUI_TEMP
  262.     GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
  263.     IfErrors startMenuDeleteLoopDone
  264.     StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
  265.   startMenuDeleteLoopDone:
  266.  
  267.   ; remove desktop shortcut
  268.   Delete "$DESKTOP\Enigma.lnk"
  269.  
  270.   ; read a value from an InstallOptions INI file
  271.   !insertmacro MUI_INSTALLOPTIONS_READ $R7 "enigma-inst-opt.ini" "Field 1" "State"
  272.  
  273.   ; remove Enigma user data if check box was checked
  274.   SetShellVarContext current ; Enigma's user data is stored for the current user
  275.   StrCmp $R7 "1" "" +2
  276.       RMDir /r "$APPDATA\Enigma"
  277.   SetShellVarContext all ; get back to all users
  278.  
  279.   ; the following code removes the version + inst. directory from the list of all Enigma installations
  280.   ReadRegStr $R8 ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "DirectoriesList"
  281.   ;MessageBox MB_OK "R8: $R8"
  282.   ${un.WordAdd} "$R8" "|" "-${VERSION}:$INSTDIR" $R9
  283.   ;MessageBox MB_OK "R9: $R9"
  284.   WriteRegStr ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "DirectoriesList" $R9
  285.  
  286.   ; remove registry keys only if there's no other version of Enigma installed
  287.   StrCmp $R9 "" nonewinst donotdelete
  288.   nonewinst:
  289.   ReadRegStr $R6 ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY} "Install_Dir"
  290.   StrCmp $R6 "" deleteit 0
  291.   StrCmp $R6 "$INSTDIR" deleteit donotdelete
  292.   deleteit:
  293.   DeleteRegKey ${INSTALLER_REGISTRY_ROOT} "Software\Microsoft\Windows\CurrentVersion\Uninstall\Enigma"
  294.   DeleteRegKey ${INSTALLER_REGISTRY_ROOT} ${INSTALLER_REGISTRY_KEY}
  295.   donotdelete:
  296.   
  297.   ; remove application directory with all its contents
  298.   RMDir /r "$INSTDIR"
  299. SectionEnd
  300.  
  301. ;===================================================
  302. ;Uninstaller Functions
  303.  
  304. Function un.onInit
  305.   !insertmacro MUI_UNGETLANGUAGE
  306.   ;Extract InstallOptions INI files
  307.   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "enigma-inst-opt.ini"
  308. FunctionEnd
  309.  
  310. Function Un.CustomOptionsPage
  311.   !insertmacro MUI_INSTALLOPTIONS_WRITE "enigma-inst-opt.ini" "Field 1" "Text" $(DeleteUserdata)
  312.   !insertmacro MUI_INSTALLOPTIONS_WRITE "enigma-inst-opt.ini" "Field 2" "Text" $(^ClickUninstall)
  313.   !insertmacro MUI_INSTALLOPTIONS_WRITE "enigma-inst-opt.ini" "Field 1" "State" "0" ; default: unchecked
  314.   ${un.WordReplace} $(^UnComponentsSubCaption) ": " "" "+" $R0
  315.   !insertmacro MUI_HEADER_TEXT $R0 "$(^UnComponentsSubText2_NoInstTypes)"
  316.   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "enigma-inst-opt.ini"
  317. FunctionEnd
  318.  
  319. ;===================================================
  320. ;Version Information
  321.  
  322.   VIProductVersion "${VERSION4}"
  323.   VIAddVersionKey /LANG=0 "ProductName" "${NAME} ${VERSION}"
  324.   VIAddVersionKey /LANG=0 "FileDescription" "${NAME} Installer"
  325.   VIAddVersionKey /LANG=0 "CompanyName" "${COMPANY}"
  326.   VIAddVersionKey /LANG=0 "FileVersion" "${VERSION}"
  327.   VIAddVersionKey /LANG=0 "LegalCopyright" "${LEGALCOPYRIGHT}"
  328.  
  329. ;===================================================