Opened 15 years ago

Closed 15 years ago

#36 closed task (fixed)

Installateur

Reported by: cedric Owned by: cedric
Priority: major Milestone: Release v0.3 stacomiJAVA
Component: Programme Java Version: 0.3
Keywords: Cc:

Description (last modified by cedric)

Installateur pour la version 0.3 en utilisant le script NSIS.

!include MUI.nsh ; interface moderne
!include zipdll.nsh ; pour que le programme puisse décompresser un zip 
!include Services.nsi ; pour tester l'existence du service PostgreSQL
; ces elts sont à rajouter comme extension au NSIS programe file

!define sysGetDiskFreeSpaceEx 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l) i'

;------------------------------------------------------------------------------------------------------------------------
; The name of the installer
Name "Stacomi0.3"
Caption "Station de contrôle des migrations"

; The file to write
OutFile STACOMI0.3-setup.exe

; The default installation directory
InstallDir $PROGRAMFILES
; macro NSIS

; Registry key to check for directory (so if you install again, it will 
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\MigraTools" "Install_Dir"

;------------------------------------------------------------------------------------------------------------------------
RequestExecutionLevel admin
AutoCloseWindow false
ShowInstDetails show
;------------------------------------------------------------------------------------------------------------------------

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "license.rtf"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "French"
UninstPage uninstConfirm
UninstPage instfiles


Function .onInstFailed
    MessageBox MB_OK "Installation annulée par l'utilisateur"
FunctionEnd

function FreeDiskSpace
  System::Call '${sysGetDiskFreeSpaceEx}(r0,.,,.r1)'
  ; convert the large integer byte values into managable kb
  System::Int64Op $1 / 1024
  ; Return the free space
  Pop $1
functionend
 
section -
  StrCpy $0 '$PROGRAMFILES' ; le chemin ou les logiciels sont installés
  Call FreeDiskSpace
 
  StrCpy $2 800000 ; L'installation prend au maximum 800 Mo
  System::Int64Op $1 > $2 ; Comparaison des espaces dispo/nécessaires
  Pop $3 ; résultat
 
  IntCmp $3 1 okay
    MessageBox MB_OK "Pas assez d'espace disque. Veuillez faire de la place sur votre disque dur..."
	Abort
  okay:
SectionEnd



Section "Stacomi v.0.3" sec1
	SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression
	MessageBox MB_YESNO "Ceci va installer le programme Stacomi. Voulez-vous continuer ?" IDYES noAbort
	Return
	
	noAbort:
		File "stacomi\stacomi.zip"
		ZipDLL::extractall "stacomi.zip" $INSTDIR
		
		;;création du fichier de désinstallation et mise a jour des registres
		WriteUninstaller $INSTDIR\stacomi\uninstaller.exe
		WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Stacomi" \
                 "DisplayName" "Contrôle des migrateurs 2010 - ONEMA"
		WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Stacomi" \
                 "UninstallString" "$\"$INSTDIR\stacomi\uninstaller.exe"		
SectionEnd

Section "PostgreSQL v.8.4.3-1" sec2
	SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression
	MessageBox MB_YESNO "Ceci va installer le programme PostgreSQL v.8.4.3-1. Voulez-vous continuer ?" IDYES noAbort
	Return

	noAbort:
		File "postgres\postgresql-8.4.3-1-windows.exe"

		; regarde si postgreSQL est déjà installé
		StrCpy $0 0
		;HKLM hotkey local machine de lma base de registre
		EnumRegKey $2 HKLM "Software\PostgreSQL\Installations" $0
		; strcm compare le resultat de 2 avec ""
		StrCmp $2 "" NotInstalledYet  
		ReadRegStr $3 HKLM "Software\PostgreSQL\Installations\$2" "Base Directory" ;lecture du path dans la base de regitre

		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"
		
		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)
		StrCpy $postgresPath $3 ; StrCpy = copie de 3 dans postgresPath
		Return

		NotInstalledYet: ; installation de postgres
			; sinon installation de la version 8.4		
			ExecWait 'postgresql-8.4.3-1-windows.exe --mode unattended 
			StrCpy $postgresPath "$PROGRAMFILES\\PostgreSQL" 
			Return
	
SectionEnd

Section "Pilote ODBC" sec4
	SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression
	MessageBox MB_YESNO "Ceci va installer le pilote ODBC PostgreSQL. Voulez-vous continuer (defaut oui)?" IDYES noAbort
	Return
	
	noAbort:
	;lancement de l'installation du pilote ODBC PostgreSQL
	File "psqlodbc.msi"
	ExecWait '"msiexec" /i "psqlodbc.msi" /qn'
	; Option silencieuse

	; création du lien ODBC
	File "DriverLienODBC\lienODBC.bat"
	File "DriverLienODBC\ScriptCreationLienODBC.reg"
	ExecWait 'lienODBC.bat'

SectionEnd

Section "Import BD_CONTMIG_LOCAL" sec3

	SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression
	
	/*
		; regarde si postgreSQL est déjà installé
		services::GetServiceNameFromDisplayName 'postgre'
		Pop $0
		IntCmp $0 0 NotInstalledYet ; si la recherche a retourné 0 résultat => aucune installation n'a été détectée
		IntOp $0 $0 - 1
		Pop $1
	*/
	; Dans le cas ou Postgres est décoché, le programme ci dessous ne sera pas exécuté plus haut, on refait...
	; regarde si postgreSQL est déjà installé
	StrCpy $0 0
	;HKLM hotkey local machine de lma base de registre
	EnumRegKey $2 HKLM "Software\PostgreSQL\Installations" $0
	; strcm compare le resultat de 2 avec ""
	StrCmp $2 "" NotInstalledYet  
	ReadRegStr $3 HKLM "Software\PostgreSQL\Installations\$2" "Base Directory" ;lecture du path dans la base de regitre

	; mise a jour de la variable permettant de localiser l'install de postgreSQL précédente...
	StrCpy $postgresPath $3
		
	MessageBox MB_YESNO "Ceci va installer une copie de la base de données BD_CONTMIG_LOCAL. Voulez-vous continuer ?" IDYES continue
	Return
	
	continue:
	File "Basepleine.backup"
	File "crea_bd_contmig_local.sql"

	;client_encoding = 'UTF8'
    ExecWait '$postgresPath\bin\psql.exe -h localhost -p 5432 -U postgres -f crea_bd_contmig_local.sql'	
	ExecWait '$postgresPath\bin\pg_restore.exe -h localhost -p 5432 -U postgres -d "BD_CONTMIG_LOCAL" -v "BasePleine.backup"'
	Return

	NotInstalledYet:
	MessageBox MB_OK|MB_ICONINFORMATION "PostgreSQL doit être installé. Installez-le avant"
	
SectionEnd

Section "R v.2.10.1" sec5
	SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression
	MessageBox MB_YESNO "Ceci va installer le programme R en version 2.10.1. Voulez-vous continuer ?" IDYES noAbort
	Return
	
	noAbort:
	;lancement de l'installation de R
	;File met le fichier dans l'executable puis va le décomprreser dans c/windows/temp
	File "R\R-2.10.1-win32.exe"
	File "R\libraries.zip"
	; File "R\scriptInstallStacomi.txt"
	
	; installation de R
	ExecWait 'R-2.10.1-win32.exe /SILENT' 
	; ExecWait '"$PROGRAMFILES\R\R-2.10.1\bin\R.exe" -f scriptInstallStacomi.txt' ; installation du package stacomi
	
	; extraction des packages nécessaires pour faire fonctionner le programme
	ZipDLL::extractall "libraries.zip" $INSTDIR\R\R-2.10.1\library
	
	; création du répertoire calcmigData : récupération du chemin de "Mes documents"
	; Call "GetMyDocs" ; la fonction écrit le chemin de "Mes documents" dans $0
	CreateDirectory "$0\CalcmigData"

SectionEnd
/*
Section "Documentation" sec6
	SetOutPath "C:\WINDOWS\Temp\" ; le répertoire (temporaire) de décompression
		MessageBox MB_YESNO "Ceci va copier la documentation sur le disque. Voulez-vous continuer ?" IDYES noAbort
		Return
		
		noAbort:
			File "Documentation.zip"
			ZipDLL::extractall "Documentation.zip" "$INSTDIR\stacomi"

	CreateShortCut "$DESKTOP\Documentation stacomi.lnk" "$PROGRAMFILES\stacomi\Documentation\documentation.htm"
SectionEnd
*/
Section "Raccourci stacomi" sec6
	SetOutPath "$INSTDIR\stacomi"
	CreateShortCut "$DESKTOP\stacomi.lnk" "$PROGRAMFILES\stacomi\stacomi0.3.1603.jar"
SectionEnd

Section Uninstall
  ;Removes directory and registry key:
  RMDIR /r $INSTDIR
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Stacomi"
SectionEnd





; This Function will display "My Documents" Folder path.
; Now it suppose to work with multiple users.
; Created by Joel 
Function "GetMyDocs"
  ReadRegStr $0 HKCU \
             "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" \
             Personal
FunctionEnd

; delete a directory only if empty
Function un.DeleteDirIfEmpty
  FindFirst $R0 $R1 "$0\*.*"
  strcmp $R1 "." 0 NoDelete
   FindNext $R0 $R1
   strcmp $R1 ".." 0 NoDelete
    ClearErrors
    FindNext $R0 $R1
    IfErrors 0 NoDelete
     FindClose $R0
     Sleep 1000
     RMDir "$0"
  NoDelete:
   FindClose $R0
FunctionEnd


; Returns: 0 - PostgreSQL not found. -1 - PostgreSQL found but too old. Otherwise - PostgreSQL version
; DetectPostgreSQL. Version requested is on the stack.
; Returns (on stack) "0" on failure (java too old or not installed), otherwise path to java interpreter
; Stack value will be overwritten!
; Function DetectPostgreSQL
; Exch $0 ; Get version requested 
;Now the previous value of $0 is on the stack, and the asked for version of JDK is in $0
; Push $1 ; $1 = PostgreSQL version string (ie 8.2)
; Push $2 ; $2 = registry key

;scan through all installs to get the highest version
; StrCpy $0 0
; DetectPostgreSQLLoop:
; EnumRegKey $2 HKLM "Software\PostgreSQL\Installations" $0
; StrCmp $2 "" DetectPostgreSQLDone
; ReadRegStr $1 HKLM "Software\PostgreSQL\Installations\$2" "Version"
; ReadRegStr $3 HKLM "Software\PostgreSQL\Installations\$2" "Base Directory"
; IntOp $0 $0 + 1
; goto DetectPostgreSQLLoop
; DetectPostgreSQLDone:
; StrCmp $1 "" NoFound
; IntCmp $1 $0 FoundNew FoundOld FoundNew

; NoFound:
; Push "0"
; Goto DetectPostgreSQLEnd
; FoundOld:
; Push "-1"
; Goto DetectPostgreSQLEnd 
; FoundNew:
; Push "$3"
; Goto DetectPostgreSQLEnd
; DetectPostgreSQLEnd:
;;Top of stack is return value, then r4,r3,r2,r1
; Exch ; => r2,rv,r1,r0
; Pop $2 ; => rv,r1,r0
; Exch ; => r1,rv,r0
; Pop $1 ; => rv,r0
; Exch ; => r0,rv
; Pop $0 ; => rv 
; FunctionEnd





; ---------------------------------------------------------------------------------------------
; DESCRIPTIONS 
; ---------------------------------------------------------------------------------------------
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
	!insertmacro MUI_DESCRIPTION_TEXT ${sec1} "Installation de l'interface de saisie Java"
	!insertmacro MUI_DESCRIPTION_TEXT ${sec2} "Installation de PostgreSQL v.8.4, le serveur de base de données"
	!insertmacro MUI_DESCRIPTION_TEXT ${sec3} "Création et initialisation de la base de données pour les migrations"
	!insertmacro MUI_DESCRIPTION_TEXT ${sec4} "Installation du pilote et lien ODBC pour accéder à la base de données à partir de R"
	!insertmacro MUI_DESCRIPTION_TEXT ${sec5} "Installation de R 2.10.1 et des packages stacomi et ggplot2usr pour le calcul des migrations"
;	!insertmacro MUI_DESCRIPTION_TEXT ${sec6} "Copie de la documentation des applications de saisie et d'analyse. Documentation au format HTML"
	!insertmacro MUI_DESCRIPTION_TEXT ${sec6} "Création d'un raccourci sur le bureau, permettant d'accéder à l'interface de saisie des données"
!insertmacro MUI_FUNCTION_DESCRIPTION_END











Change History (4)

comment:1 Changed 15 years ago by cedric

  • Status changed from new to accepted

comment:2 Changed 15 years ago by cedric

  • Description modified (diff)

comment:3 Changed 15 years ago by cedric

Reste à vérifier la version du lien ODBC
Modifier le script sql du fichier d'install à partir de la source contenant les données de l'IAV.

comment:4 Changed 15 years ago by cedric

  • Resolution set to fixed
  • Status changed from accepted to closed

Ok l'installateur fonctionne

Note: See TracTickets for help on using tickets.