NISIS (
Nullsoft Scriptable Install System ,
Sistema de Instalación por Scripts") es una herramienta muy potente y profesional para crear aplicaciones de instalaciones por medio de scripts, esta herramienta es de código abierto y ha tomado mucha popularidad entre desarrolladores.
Entre algunas de sus características más destacadas se incluyen la posibilidad de crear distintos tipos de instalación (completa, reducida o personalizada) que puede ser seleccionadas por el usuario, personalización de colores, detección de instalaciones previas, posibilidad de crear un desinstalador automático, cuenta con algoritmos de compresión para reducir el tamaño de los archivos, entre otras cosas.
Instalación.Solo hay que ir a la página y descargar la última versión estable
nsis.sourceforge.net/ en la sección de descargas y bajamos el archivo ejecutable de instalación.
La instalación es intuitiva…
Al finalizar la instalación, ejecutamos el la aplicación el cual va desplegar una ventana con varias opciones que podremos utilizar para el desarrollo de aplicaciones de instalaciones, hay que revisar la documentación, viene muy bien explicado la forma de cómo empezar.
Para crea aplicaciones
NSIS basta tener un editor de texto plano, bloc de notas o si lo prefieren pueden descargar el editor scripts para nsis
HM NIS EDIT.
HM NIS EDIT es un editor de scripts que incluye resaltado de código, tiene asistentes para la creación de aplicaciones de instalaciones, editor de diálogos, plantillas de código, soporte de plugins entre otras cosas interesantes de este editor.
Lo puedes descargar en la página:
hmne.sourceforge.net/index.php#Download Posteriormente lo instalamos y lo abrimos:
Este editor no va a facilitar bastante algunas cosas para la creación de script
NSIS, al igual que todos los editores tiene una forma intuitiva de facil aprendizaje por lo cual nos vamos a enfocar en código fuente.
Vamos hacer un código de instalación para ir viendo las opciones y sintaxis de los script en NSIS.
La extensión por defecto de los scripts es .nsi. También existen ficheros header ( al estilo de los .h de C/C++) que tienen la extensión
.nsh Podemos empezar primero por definir algunas constantes en el script, como
NOMBRE,
VERSION, entre otras cosas que necesitemos por definir en nuestro pequeño script de instalación.
Este seria el código fuente de nuestra primera aplicación de instalación:
!include "MUI.nsh"
!define NOMBRE "Mi Aplicacion"
!define VERSION "1.0"
Name "${NOMBRE} ${VERSION}" ;Establecer el nombre de la aplicación
OutFile "mySetup.exe" ;Establecer el nombre del archivo de instalación
SetCompressor LZMA ;El LZMA como algoritmo de compresión
!insertmacro MUI_LANGUAGE "Spanish" ;Define el lenguaje en español
; Paginas de instalacion</em>
!insertmacro MUI_PAGE_DIRECTORY ;Pagina para elegir el directorio de instalación
!insertmacro MUI_PAGE_INSTFILES ;Pagina para de instalación de los archivos
;Definicon de la secciones
Section "myApli" myApli
SetOutPath "$INSTDIR"
File "myaplicacion.exe"
SectionEnd
Tenemos este censillo código fuente que se encarga de instalar una aplicación en un directorio que elija el usuario, y por ultimo nos muestra los detalles de lo que se hizo..
En las sección es donde se define las operaciones a realizar, en este caso solo copiar el archivo myaplicacion.exe
Esta seria la pagina de
!insertmacro MUI_PAGE_DIRECTORY
Estos son los detalles:
Comentarios:
Comentarios de una línea es el (punto y coma) y #.
;Este es un comentario
#Otro comentario
Comentarios de bloques:
/*
Comentario de bloques
*/
Variables.Las variables se puede definir con la palabra reservada var por ejemplo:
...
var myvarable;
...
Section "myApli" myApli
StrCpy $MYVAR "un valor" asignamos un valor;
SectionEnd
Variables globales llevan /GLOBAL:
Var var1
Function testVar
Var /GLOBAL var2
StrCpy $var2 "Variable"
StrCpy $var1 "Otra variable"
FunctionEnd
Otras variables: $INSTDIR esta variable almacena la ruta del directorio de instalacion puede ser modificada utilizando StrCpy, ReadRegStr, ReadINIStr, etc.
$OUTDIR esta variables guarda el directorio actual de salida.
Existen otras que puedes consultar en el manual…
Constantes:$PROGRAMFILES esta contante guarda la ruta predeterminada de archivos de de programas, por ejemplo C:archivos de de programas
$DESKTOP la ruta del escritorio.
${NSISDIR} contiene la ruta donde se instalo NSIS.
$WINDIR Contiene la ruta de windows p.j C:windows o c:winnt
$SYSDIR Contiene las ruta de los archivos de sistemas C:windowssystem o C:winntsystem32
$TEMP Ruta de los archivos temporales C:windowstemp
$STARTMENU Menú de inicio que se utiliza para crear los accesos directos a los programas que instalemos.
$SMPROGRAMS es el equivalente a $STARTMENUProgramas
$SMSTARTUP equivalente a $SMPROGRAMSinicio
$DOCUMENTS la ruta de mis documentos C:Documents and SettingsmartinMis documentos
Otras constantes:
$FAVORITES, $MUSIC, $PICTURES, $VIDEOS, $NETHOOD, $FONTS, $TEMPLATES, etc…
Paginas:
Se pueden mostrar varios tipos de pantallas de las siguientes:
Pagina de bienvenida
!insertmacro MUI_PAGE_WELCOME
Página donde mostramos el contrato de licencia
!insertmacro MUI_PAGE_LICENSE "licencia.txt"
Página donde se muestran las distintas secciones definidas
!insertmacro MUI_PAGE_COMPONENTS
Página donde se selecciona el directorio donde instalar nuestra aplicación
!insertmacro MUI_PAGE_DIRECTORY
Página de instalación de ficheros
!insertmacro MUI_PAGE_INSTFILES
Página final
!insertmacro MUI_PAGE_FINISH
Secciones.Las secciones son para personalizar varias opciones que pueden instalar, como librerías o componentes de forma opcional y necesaria.
Section "Mi programa"
SetOutPath $INSTDIR
File "MiProgram.exe"
File "Leerme.txt"
SectionEnd
Dentro de las secciones programaremos las instrucciones que se ejecutan en tiempo de ejecución, algunas de las operaciones que se hacen en las sesiones es crear, copiar, borrar archivos, también se puede escribir y leer el registro de sistema.
Funciones.
También se pueden crear funciones que se puede llamar desde las secciones, estas pueden ser llamadas con el comando calll y hay otras que pueden ser lanzadas por algún evento.
Ejemplo:
Function funcion
# comandos
FunctionEnd
Section
Call funcion
SectionEnd
Funciones llamadas por eventos.
.onGUIInit, .onInit, .onInstFailed, .onInstSuccess, .onGUIEnd, .onMouseOverSection, .onRebootFailed, .onSelChange, .onUserAbort y .onVerifyInstDir
También para la aplicación de desinstalación se pueden utilizar las siguientes:
un.onGUIInit, un.onInit, un.onUninstFailed, un.onUninstSuccess, un.onGUIEnd, un.onRebootFailed y un.onUserAbort
Se pueden utilizar de la siguiente manera:
Para mandar un mensaje de advertencia cuando se quiere abortar la aplicacion.
Function .onUserAbort
MessageBox MB_YESNO "Abortar...?" IDYES NoCancelAbortar
Abort
NoCancelAbortar:
FunctionEnd
En la desinstalación seria:
Function un.onUserAbort
MessageBox MB_YESNO "Abortar..." IDYES NoCancelAbortar
Abort
NoCancelAbortar:
FunctionEnd
Atributos.
Los atributos son los que determinan el comportamiento de nuestro instalador. Con estos atributos podemos cambiar los mensajes durante la instalación.
Algunos atributos:
Name
Define el nombre de la aplicación
Icon
Icono para la aplicación de instalación
InstallDirSerá el directorio elegido para instalar la aplicación.
Existen muchos atributos que puden consultar en el manual…
Intrucciones basicas.
Las instrucciones que se pueden realizar en NSIS son las siguientes:
Borra un archivo:
Delete $INSTDIRfile.dat
Ejecutar un comando:
Exec '"$INSTDIRsomeprogram.exe"'
Exec '"$INSTDIRsomeprogram.exe" parametros '
Abrir una direccion web, un archivo y imprimir un archivo
ExecShell "open" "http://nsis.sf.net/"
ExecShell "open" "$INSTDIRreadme.txt"
ExecShell "print" "$INSTDIRreadme.txt"
Crear archivos
File something.exe
File /a something.exe
File *.exe
File /r *.dat
File /r data
Renombrar archivos
Rename $INSTDIRfile.ext $INSTDIRfile.dat
Borra un directorio
RMDir $INSTDIR
RMDir $INSTDIRdata
Existen otras instrucciones que s epuede consultar en el manual...
También existen instrucciones para realizar operaciones con el registro del sistema y archivos INI.
Bueno creo que es un lenguaje stript muy completo para crear aplicaciones de instalación totalmente a la medida de un programador.
Veamos el código fuente de la aplicación de instalación de
mygcrypter 1.0 Declaremos algunas defecciones para nuestra aplicación !define APPNAME "mygcrypter"
!define APPNAMEVER "${APPNAME} 1.0"
!define SHCNE_ASSOCCHANGED 0x08000000
!define SHCNF_IDLIST 0
Cargamos la librerías de cabecera para utilizar una interfaz moderna. !include "MUI.nsh"
!include "${NSISDIR}ContribModern UISystem.nsh"
Declaramos algunas variables que utilizaremosVar MUI_TEMP
Var STARTMENU_FOLDER
Personalizamos la aplicación Name "${APPNAMEVER}" ;Nombre de programa
OutFile "Setup-${APPNAME}.exe" ;Nombre de programa en exe
InstallDir "$PROGRAMFILESMygnet${APPNAME}" ;Dir donde se instalara
InstallDirRegKey HKCU "Software${APPNAME}" "" Configuración de la Interfaz!define MUI_ABORTWARNING
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_ICON "install.ico"
!define MUI_UNICON "install.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "install.bmp"
!define MUI_HEADERIMAGE_UNBITMAP "uninstall.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP "wizard.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "wizard.bmp"
!define MUI_LICENSEPAGE_CHECKBOX
!define MUI_FINISHPAGE_RUN "$INSTDIR${APPNAME}.exe"
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR${APPNAME}.html"
!define MUI_FINISHPAGE_LINK "
mygnet.com"
Paginas en la instalación
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "licencia-es.rtf"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software${APPNAME}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
Paginas de desinstalación!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
Definir el idioma !insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Spanish"
!insertmacro MUI_RESERVEFILE_LANGDLL
Tipos de instalación
LangString COMPLETA ${LANG_SPANISH} "Completa"
LangString COMPLETA ${LANG_ENGLISH} "Full"
LangString MINIMA ${LANG_SPANISH} "Optima"
LangString MINIMA ${LANG_ENGLISH} "optimal"
InstType $(COMPLETA)
InstType $(MINIMA)
Secciones de los componentes de la aplicacion
Section "Mygcrypter" Sec_myg
SectionIn RO
SetOverwrite on
SetOutPath "$INSTDIR"
Instalar archivos File "MSVBVM60.DLL"
File "COMDLG32.OCX"
File "${APPNAME}.exe"
File "mygnet.dll"
File "ico.ico"
File "go.html"
Crear acceso directo CreateShortCut "$DESKTOP${APPNAME}.lnk" "$INSTDIR${APPNAME}.exe"
Escribir en el registro del sistema WriteRegStr HKCR ".mcr" "" "mcrfile"
WriteRegStr HKCR "mcrfile" "" "${APPNAME} Config File"
WriteRegStr HKCR "mcrfileDefaultIcon" "" "$INSTDIRico.ico"
WriteRegStr HKCR "mcrfileshell" "" "Abrir"
WriteRegStr HKCR "mcrfileshellAbrircommand" "" '"$INSTDIR${APPNAME}.exe" "%1"'
Crear la aplicación de desintalacion WriteUninstaller "$INSTDIRUninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
Crear acceso directos CreateDirectory "$SMPROGRAMS$STARTMENU_FOLDER"
CreateShortCut "$SMPROGRAMS$STARTMENU_FOLDERUninstall.lnk" "$INSTDIRUninstall.exe"
CreateShortCut "$SMPROGRAMS$STARTMENU_FOLDER${APPNAME}.lnk" "$INSTDIR${APPNAME}.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
SubSection "php_mygnet"
Section "php_mygnet.dll" LibDLL
SectionIn 1
SetOverwrite on
SetOutPath "$INSTDIR"
File "php_mygnet.dll"
SectionEnd
Section "php_mygnet.pdf" ManMYG
SectionIn 1
SetOverwrite on
SetOutPath "$INSTDIR"
File "php_mygnet.pdf"
SectionEnd
SubSectionEnd
Section "Uninstall"
Delete "$INSTDIRUninstall.exe"
Delete "$INSTDIRmygnet.dll"
Delete "$INSTDIR${APPNAME}.exe"
Delete "$INSTDIRMSVBVM60.DLL"
Delete "$INSTDIRCOMDLG32.OCX"
Delete "$INSTDIRphp_mygnet.dll"
Delete "$INSTDIRphp_mygnet.pdf"
Delete "$INSTDIRico.ico"
Delete "$INSTDIRgo.html"
RMDir "$INSTDIR"
Delete "$DESKTOPmygcrypter.lnk"
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
Delete "$SMPROGRAMS$MUI_TEMPUninstall.lnk"
Delete "$SMPROGRAMS$MUI_TEMP${APPNAME}.lnk"
Eliminar todo eldirectorio StrCpy $MUI_TEMP "$SMPROGRAMS$MUI_TEMP"
startMenuDeleteLoop:
ClearErrors
RMDir $MUI_TEMP
GetFullPathName $MUI_TEMP "$MUI_TEMP.."
IfErrors startMenuDeleteLoopDone
StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
startMenuDeleteLoopDone:
DeleteRegKey HKCR ".mcr"
DeleteRegKey HKCR "mcrfile"
DeleteRegKey HKCR "mcrfile"
DeleteRegKey HKCR "SOFTWAREmicrosoftInternet ExplorerExtensions{8491AFCD-14CE-449B-A4F8-0AA5AF2B66DB}"
DeleteRegKey /ifempty HKCU "Software${APPNAME}"
SectionEnd
Funciones Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
Function .onInstSuccess
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
ExecShell "open" "http://mygnet.com/"
FunctionEnd
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
<strong>Asignación de la descripción de la secciones</strong>
LangString DESC_MYG ${LANG_SPANISH} "Instalación de mygnet_lib"
LangString DESC_MYG ${LANG_ENGLISH} "Install mygnet_lib"
LangString DESC_DLL ${LANG_SPANISH} "Libreria php_mygnet.dll"
LangString DESC_DLL ${LANG_ENGLISH} "Library php_mygnet.dll"
LangString DESC_MAN ${LANG_SPANISH} "Manual php_mygnet"
LangString DESC_MAN ${LANG_ENGLISH} "Manual php_mygnet"
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${Sec_myg} $(DESC_MYG)
!insertmacro MUI_DESCRIPTION_TEXT ${LibDLL} $(DESC_DLL)
!insertmacro MUI_DESCRIPTION_TEXT ${LibSO} $(DESC_SO)
!insertmacro MUI_DESCRIPTION_TEXT ${manMYG} $(DESC_MAN)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Esta es la la aplicación de instalación:Elegir el idioma de la instalación.
Pantalla de bienvenida.
Pantalla de licencia.
Pantalla de componentes.
Pantalla para elegir el directorio.
Pantalla para elegir el grupo de menús.
Pantalla final
Lanza la aplicación.
Si quieres el código fuente del script de instalación lo puedes descargar en la siguiente dirección:
http://www.mygnet.net/it/descargas/codigos/script_de_instalacion_de_mygcrypter_1_dot_0.1483.zipReferencias:
nsis.sourceforge.net/Docs/Un saludo.