1 | | Installateur pour la version 0.3 en utilisant le script NSIS |
| 1 | Installateur pour la version 0.3 en utilisant le script NSIS. |
| 2 | {{{ |
| 3 | !include MUI.nsh ; interface moderne |
| 4 | !include zipdll.nsh ; pour que le programme puisse décompresser un zip |
| 5 | !include Services.nsi ; pour tester l'existence du service PostgreSQL |
| 6 | ; ces elts sont à rajouter comme extension au NSIS programe file |
| 7 | |
| 8 | !define sysGetDiskFreeSpaceEx 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l) i' |
| 9 | |
| 10 | ;------------------------------------------------------------------------------------------------------------------------ |
| 11 | ; The name of the installer |
| 12 | Name "Stacomi0.3" |
| 13 | Caption "Station de contrôle des migrations" |
| 14 | |
| 15 | ; The file to write |
| 16 | OutFile STACOMI0.3-setup.exe |
| 17 | |
| 18 | ; The default installation directory |
| 19 | InstallDir $PROGRAMFILES |
| 20 | ; macro NSIS |
| 21 | |
| 22 | ; Registry key to check for directory (so if you install again, it will |
| 23 | ; overwrite the old one automatically) |
| 24 | InstallDirRegKey HKLM "Software\MigraTools" "Install_Dir" |
| 25 | |
| 26 | ;------------------------------------------------------------------------------------------------------------------------ |
| 27 | RequestExecutionLevel admin |
| 28 | AutoCloseWindow false |
| 29 | ShowInstDetails show |
| 30 | ;------------------------------------------------------------------------------------------------------------------------ |
| 31 | |
| 32 | !insertmacro MUI_PAGE_WELCOME |
| 33 | !insertmacro MUI_PAGE_LICENSE "license.rtf" |
| 34 | !insertmacro MUI_PAGE_COMPONENTS |
| 35 | !insertmacro MUI_PAGE_INSTFILES |
| 36 | !insertmacro MUI_PAGE_FINISH |
| 37 | !insertmacro MUI_LANGUAGE "French" |
| 38 | UninstPage uninstConfirm |
| 39 | UninstPage instfiles |
| 40 | |
| 41 | |
| 42 | Function .onInstFailed |
| 43 | MessageBox MB_OK "Installation annulée par l'utilisateur" |
| 44 | FunctionEnd |
| 45 | |
| 46 | function FreeDiskSpace |
| 47 | System::Call '${sysGetDiskFreeSpaceEx}(r0,.,,.r1)' |
| 48 | ; convert the large integer byte values into managable kb |
| 49 | System::Int64Op $1 / 1024 |
| 50 | ; Return the free space |
| 51 | Pop $1 |
| 52 | functionend |
| 53 | |
| 54 | section - |
| 55 | StrCpy $0 '$PROGRAMFILES' ; le chemin ou les logiciels sont installés |
| 56 | Call FreeDiskSpace |
| 57 | |
| 58 | StrCpy $2 800000 ; L'installation prend au maximum 800 Mo |
| 59 | System::Int64Op $1 > $2 ; Comparaison des espaces dispo/nécessaires |
| 60 | Pop $3 ; résultat |
| 61 | |
| 62 | IntCmp $3 1 okay |
| 63 | MessageBox MB_OK "Pas assez d'espace disque. Veuillez faire de la place sur votre disque dur..." |
| 64 | Abort |
| 65 | okay: |
| 66 | SectionEnd |
| 67 | |
| 68 | |
| 69 | |
| 70 | Section "Stacomi v.0.3" sec1 |
| 71 | SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression |
| 72 | MessageBox MB_YESNO "Ceci va installer le programme Stacomi. Voulez-vous continuer ?" IDYES noAbort |
| 73 | Return |
| 74 | |
| 75 | noAbort: |
| 76 | File "stacomi\stacomi.zip" |
| 77 | ZipDLL::extractall "stacomi.zip" $INSTDIR |
| 78 | |
| 79 | ;;création du fichier de désinstallation et mise a jour des registres |
| 80 | WriteUninstaller $INSTDIR\stacomi\uninstaller.exe |
| 81 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Stacomi" \ |
| 82 | "DisplayName" "Contrôle des migrateurs 2010 - ONEMA" |
| 83 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Stacomi" \ |
| 84 | "UninstallString" "$\"$INSTDIR\stacomi\uninstaller.exe" |
| 85 | SectionEnd |
| 86 | |
| 87 | Section "PostgreSQL v.8.4.3-1" sec2 |
| 88 | SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression |
| 89 | MessageBox MB_YESNO "Ceci va installer le programme PostgreSQL v.8.4.3-1. Voulez-vous continuer ?" IDYES noAbort |
| 90 | Return |
| 91 | |
| 92 | noAbort: |
| 93 | File "postgres\postgresql-8.4.3-1-windows.exe" |
| 94 | |
| 95 | ; regarde si postgreSQL est déjà installé |
| 96 | StrCpy $0 0 |
| 97 | ;HKLM hotkey local machine de lma base de registre |
| 98 | EnumRegKey $2 HKLM "Software\PostgreSQL\Installations" $0 |
| 99 | ; strcm compare le resultat de 2 avec "" |
| 100 | StrCmp $2 "" NotInstalledYet |
| 101 | ReadRegStr $3 HKLM "Software\PostgreSQL\Installations\$2" "Base Directory" ;lecture du path dans la base de regitre |
| 102 | |
| 103 | MessageBox MB_OK|MB_ICONINFORMATION "PostgreSQL ne sera pas installé car une installation précédente a déjà été détectée,veuillez la désinstaller $3" |
| 104 | |
| 105 | Var /GLOBAL postgresPath ; mise a jour de la variable permettant de localiser l'install de postgreSQL précédente... (le fait de mettre global permet de déclarer la variable dans l'ensemble du programme) |
| 106 | StrCpy $postgresPath $3 ; StrCpy = copie de 3 dans postgresPath |
| 107 | Return |
| 108 | |
| 109 | NotInstalledYet: ; installation de postgres |
| 110 | ; sinon installation de la version 8.4 |
| 111 | ExecWait 'postgresql-8.4.3-1-windows.exe --mode unattended |
| 112 | StrCpy $postgresPath "$PROGRAMFILES\\PostgreSQL" |
| 113 | Return |
| 114 | |
| 115 | SectionEnd |
| 116 | |
| 117 | Section "Pilote ODBC" sec4 |
| 118 | SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression |
| 119 | MessageBox MB_YESNO "Ceci va installer le pilote ODBC PostgreSQL. Voulez-vous continuer (defaut oui)?" IDYES noAbort |
| 120 | Return |
| 121 | |
| 122 | noAbort: |
| 123 | ;lancement de l'installation du pilote ODBC PostgreSQL |
| 124 | File "psqlodbc.msi" |
| 125 | ExecWait '"msiexec" /i "psqlodbc.msi" /qn' |
| 126 | ; Option silencieuse |
| 127 | |
| 128 | ; création du lien ODBC |
| 129 | File "DriverLienODBC\lienODBC.bat" |
| 130 | File "DriverLienODBC\ScriptCreationLienODBC.reg" |
| 131 | ExecWait 'lienODBC.bat' |
| 132 | |
| 133 | SectionEnd |
| 134 | |
| 135 | Section "Import BD_CONTMIG_LOCAL" sec3 |
| 136 | |
| 137 | SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression |
| 138 | |
| 139 | /* |
| 140 | ; regarde si postgreSQL est déjà installé |
| 141 | services::GetServiceNameFromDisplayName 'postgre' |
| 142 | Pop $0 |
| 143 | IntCmp $0 0 NotInstalledYet ; si la recherche a retourné 0 résultat => aucune installation n'a été détectée |
| 144 | IntOp $0 $0 - 1 |
| 145 | Pop $1 |
| 146 | */ |
| 147 | ; Dans le cas ou Postgres est décoché, le programme ci dessous ne sera pas exécuté plus haut, on refait... |
| 148 | ; regarde si postgreSQL est déjà installé |
| 149 | StrCpy $0 0 |
| 150 | ;HKLM hotkey local machine de lma base de registre |
| 151 | EnumRegKey $2 HKLM "Software\PostgreSQL\Installations" $0 |
| 152 | ; strcm compare le resultat de 2 avec "" |
| 153 | StrCmp $2 "" NotInstalledYet |
| 154 | ReadRegStr $3 HKLM "Software\PostgreSQL\Installations\$2" "Base Directory" ;lecture du path dans la base de regitre |
| 155 | |
| 156 | ; mise a jour de la variable permettant de localiser l'install de postgreSQL précédente... |
| 157 | StrCpy $postgresPath $3 |
| 158 | |
| 159 | MessageBox MB_YESNO "Ceci va installer une copie de la base de données BD_CONTMIG_LOCAL. Voulez-vous continuer ?" IDYES continue |
| 160 | Return |
| 161 | |
| 162 | continue: |
| 163 | File "Basepleine.backup" |
| 164 | File "crea_bd_contmig_local.sql" |
| 165 | |
| 166 | ;client_encoding = 'UTF8' |
| 167 | ExecWait '$postgresPath\bin\psql.exe -h localhost -p 5432 -U postgres -f crea_bd_contmig_local.sql' |
| 168 | ExecWait '$postgresPath\bin\pg_restore.exe -h localhost -p 5432 -U postgres -d "BD_CONTMIG_LOCAL" -v "BasePleine.backup"' |
| 169 | Return |
| 170 | |
| 171 | NotInstalledYet: |
| 172 | MessageBox MB_OK|MB_ICONINFORMATION "PostgreSQL doit être installé. Installez-le avant" |
| 173 | |
| 174 | SectionEnd |
| 175 | |
| 176 | Section "R v.2.10.1" sec5 |
| 177 | SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression |
| 178 | MessageBox MB_YESNO "Ceci va installer le programme R en version 2.10.1. Voulez-vous continuer ?" IDYES noAbort |
| 179 | Return |
| 180 | |
| 181 | noAbort: |
| 182 | ;lancement de l'installation de R |
| 183 | ;File met le fichier dans l'executable puis va le décomprreser dans c/windows/temp |
| 184 | File "R\R-2.10.1-win32.exe" |
| 185 | File "R\libraries.zip" |
| 186 | ; File "R\scriptInstallStacomi.txt" |
| 187 | |
| 188 | ; installation de R |
| 189 | ExecWait 'R-2.10.1-win32.exe /SILENT' |
| 190 | ; ExecWait '"$PROGRAMFILES\R\R-2.10.1\bin\R.exe" -f scriptInstallStacomi.txt' ; installation du package stacomi |
| 191 | |
| 192 | ; extraction des packages nécessaires pour faire fonctionner le programme |
| 193 | ZipDLL::extractall "libraries.zip" $INSTDIR\R\R-2.10.1\library |
| 194 | |
| 195 | ; création du répertoire calcmigData : récupération du chemin de "Mes documents" |
| 196 | ; Call "GetMyDocs" ; la fonction écrit le chemin de "Mes documents" dans $0 |
| 197 | CreateDirectory "$0\CalcmigData" |
| 198 | |
| 199 | SectionEnd |
| 200 | /* |
| 201 | Section "Documentation" sec6 |
| 202 | SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression |
| 203 | MessageBox MB_YESNO "Ceci va copier la documentation sur le disque. Voulez-vous continuer ?" IDYES noAbort |
| 204 | Return |
| 205 | |
| 206 | noAbort: |
| 207 | File "Documentation.zip" |
| 208 | ZipDLL::extractall "Documentation.zip" "$INSTDIR\stacomi" |
| 209 | |
| 210 | CreateShortCut "$DESKTOP\Documentation stacomi.lnk" "$PROGRAMFILES\stacomi\Documentation\documentation.htm" |
| 211 | SectionEnd |
| 212 | */ |
| 213 | Section "Raccourci stacomi" sec6 |
| 214 | SetOutPath "$INSTDIR\stacomi" |
| 215 | CreateShortCut "$DESKTOP\stacomi.lnk" "$PROGRAMFILES\stacomi\stacomi0.3.1603.jar" |
| 216 | SectionEnd |
| 217 | |
| 218 | Section Uninstall |
| 219 | ;Removes directory and registry key: |
| 220 | RMDIR /r $INSTDIR |
| 221 | DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Stacomi" |
| 222 | SectionEnd |
| 223 | |
| 224 | |
| 225 | |
| 226 | |
| 227 | |
| 228 | ; This Function will display "My Documents" Folder path. |
| 229 | ; Now it suppose to work with multiple users. |
| 230 | ; Created by Joel |
| 231 | Function "GetMyDocs" |
| 232 | ReadRegStr $0 HKCU \ |
| 233 | "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" \ |
| 234 | Personal |
| 235 | FunctionEnd |
| 236 | |
| 237 | ; delete a directory only if empty |
| 238 | Function un.DeleteDirIfEmpty |
| 239 | FindFirst $R0 $R1 "$0\*.*" |
| 240 | strcmp $R1 "." 0 NoDelete |
| 241 | FindNext $R0 $R1 |
| 242 | strcmp $R1 ".." 0 NoDelete |
| 243 | ClearErrors |
| 244 | FindNext $R0 $R1 |
| 245 | IfErrors 0 NoDelete |
| 246 | FindClose $R0 |
| 247 | Sleep 1000 |
| 248 | RMDir "$0" |
| 249 | NoDelete: |
| 250 | FindClose $R0 |
| 251 | FunctionEnd |
| 252 | |
| 253 | |
| 254 | ; Returns: 0 - PostgreSQL not found. -1 - PostgreSQL found but too old. Otherwise - PostgreSQL version |
| 255 | ; DetectPostgreSQL. Version requested is on the stack. |
| 256 | ; Returns (on stack) "0" on failure (java too old or not installed), otherwise path to java interpreter |
| 257 | ; Stack value will be overwritten! |
| 258 | ; Function DetectPostgreSQL |
| 259 | ; Exch $0 ; Get version requested |
| 260 | ;Now the previous value of $0 is on the stack, and the asked for version of JDK is in $0 |
| 261 | ; Push $1 ; $1 = PostgreSQL version string (ie 8.2) |
| 262 | ; Push $2 ; $2 = registry key |
| 263 | |
| 264 | ;scan through all installs to get the highest version |
| 265 | ; StrCpy $0 0 |
| 266 | ; DetectPostgreSQLLoop: |
| 267 | ; EnumRegKey $2 HKLM "Software\PostgreSQL\Installations" $0 |
| 268 | ; StrCmp $2 "" DetectPostgreSQLDone |
| 269 | ; ReadRegStr $1 HKLM "Software\PostgreSQL\Installations\$2" "Version" |
| 270 | ; ReadRegStr $3 HKLM "Software\PostgreSQL\Installations\$2" "Base Directory" |
| 271 | ; IntOp $0 $0 + 1 |
| 272 | ; goto DetectPostgreSQLLoop |
| 273 | ; DetectPostgreSQLDone: |
| 274 | ; StrCmp $1 "" NoFound |
| 275 | ; IntCmp $1 $0 FoundNew FoundOld FoundNew |
| 276 | |
| 277 | ; NoFound: |
| 278 | ; Push "0" |
| 279 | ; Goto DetectPostgreSQLEnd |
| 280 | ; FoundOld: |
| 281 | ; Push "-1" |
| 282 | ; Goto DetectPostgreSQLEnd |
| 283 | ; FoundNew: |
| 284 | ; Push "$3" |
| 285 | ; Goto DetectPostgreSQLEnd |
| 286 | ; DetectPostgreSQLEnd: |
| 287 | ;;Top of stack is return value, then r4,r3,r2,r1 |
| 288 | ; Exch ; => r2,rv,r1,r0 |
| 289 | ; Pop $2 ; => rv,r1,r0 |
| 290 | ; Exch ; => r1,rv,r0 |
| 291 | ; Pop $1 ; => rv,r0 |
| 292 | ; Exch ; => r0,rv |
| 293 | ; Pop $0 ; => rv |
| 294 | ; FunctionEnd |
| 295 | |
| 296 | |
| 297 | |
| 298 | |
| 299 | |
| 300 | ; --------------------------------------------------------------------------------------------- |
| 301 | ; DESCRIPTIONS |
| 302 | ; --------------------------------------------------------------------------------------------- |
| 303 | !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN |
| 304 | !insertmacro MUI_DESCRIPTION_TEXT ${sec1} "Installation de l'interface de saisie Java" |
| 305 | !insertmacro MUI_DESCRIPTION_TEXT ${sec2} "Installation de PostgreSQL v.8.4, le serveur de base de données" |
| 306 | !insertmacro MUI_DESCRIPTION_TEXT ${sec3} "Création et initialisation de la base de données pour les migrations" |
| 307 | !insertmacro MUI_DESCRIPTION_TEXT ${sec4} "Installation du pilote et lien ODBC pour accéder à la base de données à partir de R" |
| 308 | !insertmacro MUI_DESCRIPTION_TEXT ${sec5} "Installation de R 2.10.1 et des packages stacomi et ggplot2usr pour le calcul des migrations" |
| 309 | ; !insertmacro MUI_DESCRIPTION_TEXT ${sec6} "Copie de la documentation des applications de saisie et d'analyse. Documentation au format HTML" |
| 310 | !insertmacro MUI_DESCRIPTION_TEXT ${sec6} "Création d'un raccourci sur le bureau, permettant d'accéder à l'interface de saisie des données" |
| 311 | !insertmacro MUI_FUNCTION_DESCRIPTION_END |
| 312 | |
| 313 | |
| 314 | |
| 315 | |
| 316 | |
| 317 | |
| 318 | |
| 319 | |
| 320 | |
| 321 | |
| 322 | |
| 323 | }}} |