Cuando creamos nuestras aplicaciones, ya sea para la distribución en Cloud o para Local, necesitamos muchas veces que sea el cliente y no nosotros el que realice la instalación, para realizar un instalador tenemos vInstallBuilder de Velneo.

Esto implica que al usuario final debemos darle indicaciones de como instalar vAdmin y vClient y posteriormente este usuario tiene que tener permisos en el servidor, sea este en Cloud o Local, para realizar la instalación de la aplicación en dicho servidor.

Por un lado es todo muy sencillo y a la hora de realizar el instalador con vInstallBuilder también es muy sencillo.

Para realizar un instalador con vInstallBuilder es muy sencillo, solo tenemos que tener la aplicación y seguir unos sencillos pasos.

Instalador - vInstallBuilder

Como vemos en la imagen solo tenemos que indicar un par de datos para tener nuestro instalador, lo tedioso viene ahora.

Si queremos añadir datos de las tablas para agilizar o dar un valor añadido, como pueden ser códigos postales, países, o cualquier dato que vemos necesario que este incluido en nuestra aplicación, debemos hacerlo de uno en uno.

Instalador - Velneo vInstallBuilder - Añadir Datos

Podemos seleccionar una carpeta, pero esto añadiría datos basura o de prueba que no queremos distribuir, así que solo nos queda ir uno a uno indicando cuales queremos añadir y sin multiselección, esperemos que Velneo cambie esto.

Una vez terminado de configurar el instalador podremos probarlo o crearlo.

Ahora solo tenemos que enviar a nuestro Cliente el archivo .vin,  el vClient y el vAdmin y decirle que lo instale todo.

¿Vale, pero que pasa si queremos automatizar esta tarea y que el usuario solo tenga que hacer lo mismo que con cualquier aplicación de Windows?

Pues nos creamos un instalador con NSIS que es gratis.

Lo primero y ante todo es tener una maquina virtual con un Windows para que el instalador que creemos no este corrupto con las mil y una pruebas que realizamos en nuestros equipos, te recomiendo VirtualBox, que también es gratis.

Ahora bien, todo depende de lo que queramos enviar a nuestro cliente necesitaremos una serie de condiciones, empecemos con la básica:

  • Instalación de vServer en Cloud gestionada por nosotros
  • Todo el montaje corre de nuestra cuenta
  • Solo enviaremos el vClient
  • Acceso directo pulsar y conectar, sin contraseña o con ella.

En una carpeta, en el escritorio por ejemplo, meteremos los archivos necesarios:

  • vClient.exe
  • Licencia.txt
  • IconoApp.ico

Instalador - Archivos

Para agilizar el tramite y no tener que escribir como locos, se trata de hacer Life Is Soft no Life Is Hard, así que recurriremos a una aplicación que nos agilizara mucho el proceso ya que tiene un asistente rápido y fácil, es HM NIS Edit, que tiene muchos años pero funciona de perlas. Un pequeño tutorial de como usarlo aquí.

Una vez usado el asistente para crear el Script de NSIS tendremos algo como esto:

Instalador - HM NIS Edit - [Tutor Instalador.nsi]

A voz de pronto todo estaría perfecto para compilar y distribuir, pero no, si pensamos en lo que hemos hecho solo hemos indicado que copie el instalador de vClient y lo ejecute. Esto instalara vClient y nada mas.

Tocaremos un poco el código para adaptarlo a nuestras necesidades.

Vamos a cambiar el código de la sección Principal para que quede mas o menos así:

Section "Principal" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File "velneov7-win32-vclient-setup-7.17.1.exe"
  File "NexusFireMan.ico"
  
  ; Instalación vClient en modo silencioso y borrado del instalador
  ExecWait '"$INSTDIR\velneov7-win32-vclient-setup-7.17.1.exe" /noacc /S' $2
  Delete "$INSTDIR\velneov7-win32-vclient-setup-7.17.1.exe"
  
  ; Creamos acceso directo
  CreateDirectory "$SMPROGRAMS\Tutor Instalador"
  CreateShortCut "$SMPROGRAMS\Tutor Instalador\Tutor Instalador.lnk" "$INSTDIR\vClient.exe" \
        "vatp://usuario:contraseña@servidor:puerto/APLICACION" "$INSTDIR\NexusFireMan.ico"
  CreateShortCut "$DESKTOP\Tutor Instalador.lnk" "$INSTDIR\vClient.exe" \
        "vatp://usuario:contraseña@servidor:puerto/APLICACION" "$INSTDIR\NexusFireMan.ico"
SectionEnd

Ya tenemos lo referente a la instalación y accesos directos de tal forma que el usuario solo tendrá que hacer doble clic en nuestro acceso directo y entrara en la aplicación.

Otra sección que hay que modificar es la siguiente:

Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vClient.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\vClient.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd

Mas que nada por quitar el rastro del instalador de Velneo.

Y para seguir rizando el rizo estas lineas:

!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\vClient.exe"

; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\vClient.exe"
!define MUI_FINISHPAGE_RUN_PARAMETERS "vatp://usuario:contraseña@servidor:puerto/APLICACION"
!insertmacro MUI_PAGE_FINISH

Seguimos con el ultimo paso, desinstalar la aplicación, para ello modificaremos el código así:

Section Uninstall
  Delete "$INSTDIR\${PRODUCT_NAME}.url"
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\NexusFireMan.ico"
  ExecWait '"$INSTDIR\uninstall-vclient-v7.exe" /S' $2

  Delete "$SMPROGRAMS\Tutor Instalador\Uninstall.lnk"
  Delete "$SMPROGRAMS\Tutor Instalador\Website.lnk"
  Delete "$DESKTOP\Tutor Instalador.lnk"
  Delete "$SMPROGRAMS\Tutor Instalador\Tutor Instalador.lnk"

  RMDir "$SMPROGRAMS\Tutor Instalador"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true
SectionEnd

Y con esto finaliza todo lo relacionado con el Script para que nuestros clientes se conecten al Cloud y puedan disfrutar de nuestras aplicaciones.

Pero ahora viene lo interesante, ¿que pasa si queremos instalar en el Cliente un vServer?

Siguiente escenario:

  • vClient.exe
  • vServer.exe
  • Licencia.txt
  • IconoApp.ico

Instalador - Instaler vServer

Como ya tenemos todo andado solo tendremos que copiar y pegar un par de lineas para que queden así:

Section "Principal" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File "velneov7-win32-vclient-setup-7.17.1.exe"
  File "velneov7-win32-vserver-setup-7.17.1.exe"
  File "NexusFireMan.ico"
  
  ; Instalación vClient en modo silencioso y borrado del instalador
  ExecWait '"$INSTDIR\velneov7-win32-vclient-setup-7.17.1.exe" /noacc /S' $2
  Delete "$INSTDIR\velneov7-win32-vclient-setup-7.17.1.exe"
  
  ; Instalación de vServer
  ExecWait '"$INSTDIR\velneov7-win32-vserver-setup-7.17.1.exe" /S' $2
  Delete "$INSTDIR\velneov7-win32-vserver-setup-7.17.1.exe"

  ; Instalamos el servicio
  ExecWait '"$INSTDIR\vServer.exe" -i' $2
  
  ; Creamos acceso directo
  CreateDirectory "$SMPROGRAMS\Tutor Instalador"
  CreateShortCut "$SMPROGRAMS\Tutor Instalador\Tutor Instalador.lnk" "$INSTDIR\vClient.exe" \
        "vatp://usuario:contraseña@servidor:puerto/APLICACION" "$INSTDIR\NexusFireMan.ico"
  CreateShortCut "$DESKTOP\Tutor Instalador.lnk" "$INSTDIR\vClient.exe" \
        "vatp://usuario:contraseña@servidor:puerto/APLICACION" "$INSTDIR\NexusFireMan.ico"
SectionEnd

Ahora añadiremos las lineas necesarias en la sección de desinstalar:

Section Uninstall
  Delete "$INSTDIR\${PRODUCT_NAME}.url"
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\NexusFireMan.ico"
  ExecWait '"$INSTDIR\vServer.exe" -u' $2
  ExecWait '"$INSTDIR\uninstall-vclient-v7.exe" /S' $2
  ExecWait '"$INSTDIR\uninstall-vserver-v7.exe" /S' $2

  Delete "$SMPROGRAMS\Tutor Instalador\Uninstall.lnk"
  Delete "$SMPROGRAMS\Tutor Instalador\Website.lnk"
  Delete "$DESKTOP\Tutor Instalador.lnk"
  Delete "$SMPROGRAMS\Tutor Instalador\Tutor Instalador.lnk"

  RMDir "$SMPROGRAMS\Tutor Instalador"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true
SectionEnd

Con esto ya esta todo, pero realmente no, ya que el servicio se instala con inicio manual y eso es lo que no queremos.

Para poder cambiar la forma de arranque del servicio hay varias opciones, por un lado tenemos los comandos de sistema para cambiar esto.

Solo hay que indicar lo siguiente:

; Instalamos el servicio
  ExecWait '"$INSTDIR\vServer.exe" -i' $2
  ExecWait 'sc config "Vatp Service 7.17.1.13288" start=auto' $2

Otra opción es añadir el Plugin Simple Service a NSIS y cambiar el código por esto:

; Instalamos el servicio
  ExecWait '"$INSTDIR\vServer.exe" -i' $2
  SimpleSC::SetServiceStartType "Vatp Service 7.17.1.13288" "2"

Como vemos no es difícil crear un instalador personalizado, pero ahora viene lo mas gracioso, ¿donde esta nuestra aplicación y sus datos?

Por este motivo es recomendable y casi imperativo usar el asistente o tendríamos que escribir todo el código a mano y puede ser muy tedioso.

Al principio comentábamos la necesidad de tener una maquina virtual y aquí es donde viene el motivo ya que en nuestra maquina de desarrollo tendremos mil y un proyectos con muchos datos y la maquina virtual estará limpia de polvo y paja, así que en dicha maquina instalaremos nuestra aplicación con todo lo necesario, vClient, vServer y vAdmin.

Espero que llegados a este punto todos sepan que al dejar de haber soporte para Windows XP por parte de Velneo la mayoría de equipos a partir de Windows 7 se montan en x64 y por consiguiente Velneo tendrá las instancias en C:\Windows\SysWOW64\config\systemprofile\Velneo.

Si queremos dar soporte también a sistemas x86 tendremos que condicionar el instalador par detectar la arquitectura, tema el cual no tratare.

Bueno siguiendo con lo que estábamos, una vez instalado todo, incluido la aplicación y los datos, configuraremos lo necesario desde vAdmin, los usuarios, los grupos, etc.

Usando el asistente hay una parte en la cual nos permite añadir los archivos, pero no solo eso, si no que nos permite separarlo por secciones.

Instalador - Asistente para creacion instalaciones - Secciones

En la parte izquierda indicaremos lo siguiente:

  • Principal o Aplicaciones
  • Datos e Instancias
  • Servidor

Como todos sabemos el orden en la instalación es importante ya que vServer bloquea el acceso a los archivos si esta iniciado, así que lo dejaremos para lo ultimo.

En Principal ya sabemos que necesitamos puesto que es lo mismo que hasta ahora pero en Datos e Instancias es donde deberemos indicar lo mas gordo.

Seleccionaremos la carpeta que indique anteriormente, donde se guardan las Instancias y el estado de vServer, de esta manera cuando lo instale el cliente estará como nosotros queremos.

Si no queremos añadir Datos no hace falta, ya que muchas veces no es necesario, pero si queremos este es momento de indicar que archivos serán.

En cada sección añadiremos los archivos necesarios quedando algo parecido a esto:

Section "Principal" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File "velneov7-win32-vclient-setup-7.17.1.exe"
  File "NexusFireMan.ico"
  
  ; Instalación vClient en modo silencioso y borrado del instalador
  Exec.....
SectionEnd

Section "Instancias/Datos" SEC02
  SetDetailsPrint none
  SetOutPath "$SYSDIR\config\systemprofile\Velneo\cajas\APLICACION"
  File "..\..\..\..\Windows\SysWOW64\config\systemprofile\Velneo\cajas\APLICACION\4dNNtpwi.vca"
  SetOutPath "$SYSDIR\config\systemprofile\Velneo\cajas\APLICACION"
  File "..\..\..\..\Windows\SysWOW64\config\systemprofile\Velneo\cajas\APLICACION\4POImenz.vcd"
  File "..\.."

  SetOutPath "C:\DATA"
  File "..\..\..\..\DATA\CNT.cnd"
  File "..\..\..\..\DATA\CNT.cni"
  File "..\..\..\..\DATA\CNT.dat"
  File "..\..\..\..\DATA\CNT.idx"
SectionEnd

Section "Servidor" SEC03
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File "velneov7-win32-vserver-setup-7.17.1.exe"

  ; Instalación de vServer
  Exec...
SectionEnd

Como vemos si lo hacemos con el asistente tendremos el código para todos los archivos rápidamente, por el contrario si lo hacemos a mano se puede volver tedioso, sobre todo en aplicaciones grandes.

Para la sección de desinstalación pasa igual.

Section Uninstall
  SetDetailsPrint none
  Delete "C:\DATA\CNT.idx"
  Delete "C:\DATA\CNT.dat"
  Delete "C:\DATA\CNT.cni"
  .......

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true
SectionEnd

Mucho código que podemos ahorrarnos gracias al asistente.

Y con esto ya tenemos todo lo necesario para poder realizar un instalador para distribuir aplicaciones de Velneo totalmente personalizado.

Pero todavía se puede rizar mas el rizo, ¿y como?

Si te atreves puedes hacer todo a pelo, sin pasar por los instaladores de Velneo, pero eso ya es otro cantar.

Gracias por leerlo entero y nos vemos pronto.