2009-06-13 19 views
9

Actualmente tengo un proyecto con un instalador que hice con NSIS, pero me gustaría tener una actualización de las nuevas versiones que solo tienen los archivos modificados y mostrarán un registro de cambios. La plataforma objetivo es Windows. ¿Qué métodos/sugerencias tienes que hacer?¿Cómo se hace un instalador de actualización con NSIS?

+0

¿Has completado tu proyecto? ¿Qué usaste al final? Tal vez podría aceptar una de las respuestas :) –

+0

Sí, lo completé ... pero no usé ninguno de estos métodos, ya que era más complicado de lo que me hubiera gustado. Así que acabo de hacer una compilación de lanzamiento completa para las actualizaciones y requirió que el usuario las descargue antes de dejar que se ejecute la aplicación. – staackuser2

+0

Acabo de aceptar su respuesta ... aunque no la use, parece ser el mejor método disponible. – staackuser2

Respuesta

12

Es posible que desee reconsiderar el uso de NSIS. Si le interesan los parches y la distribución de actualizaciones, probablemente obtenga el mayor beneficio al utilizar una tecnología de instalador que utiliza las capacidades de Windows Installer (msiexec).

NSIS es básicamente un programa que se ejecuta y hace lo que usted desea, mientras que un instalador de Windows Installer le obliga a dividir su aplicación en características y componentes que pueden ser administrados por el instalador de Windows msi service. MSI rastreará cosas como qué versiones de productos ha instalado, si ejecutar el instalador nuevamente se ejecutará en modo de mantenimiento, si puede instalar 2 productos de diferentes versiones, si un parche se puede aplicar a una versión particular de un producto o cualquier otra pregunta relacionada con actualizaciones e instalaciones.

Básicamente, la mayoría de las cosas que está solicitando estarán disponibles de fábrica si cambia a una tecnología de Windows Installer. Mientras que si usa NSIS (que no usa la tecnología Windows Installer), tendrá que implementarlo usted mismo.

Como ejemplo, hay un constructor de instalador bastante completo llamado AdvancedInstaller (http://www.advancedinstaller.com/) que suena como lo que quiere. Alternativamente, si desea pasar el resto de sus foros de pesca de arrastre y grupos de noticias, entonces hay un producto de código abierto llamado WiX que hace algo similar;)

+5

No estoy seguro de por qué me marcaron esto. Si bien NSIS es de código abierto, debe pensar en la mejor herramienta para el trabajo después de todo lo que está ejecutando bajo Windows. –

1

Una posible forma sería almacenar un archivo XML en su servidor de descarga que tenga cada versión lanzada y una lista de archivos que hayan cambiado para cada versión. El instalador escribiría una clave de registro en la instalación de la versión de los archivos que instaló.

Luego, en la actualización, el instalador descarga y analiza el archivo XML, y encuentra los nodos que tienen números de versión superiores a los que están instalados actualmente. Usted muestra todos los archivos en un cuadro de texto en una página de instalador, y cuando el usuario confirma, el instalador descarga todos los archivos y luego actualiza el registro a la última versión.

+0

Solo tengo algunos archivos, y se cambiarán con casi todas las actualizaciones. Así que solo quería agruparlos en un updater.exe, y hacer que el instalador sea diferente al archivo exe de instalación completo. Todavía no estoy seguro de qué es lo mejor ... tal vez una instalación completa cada vez es lo suficientemente buena para mi caso. – staackuser2

3

A pesar de mi comentario anterior, he escrito un instalador de 5000 líneas utilizando NSIS con 13 páginas personalizadas. Incluso he visto parches y es un poco complicado. El principal consejo es asegurarse de que está aplicando parches a la versión que cree que está parcheando y luego use uno de los complementos de parches disponibles.

Existen varias tecnologías de parchado que comparan archivos y producen archivos de cambio de parche y el código NSIS requerido para "instalarlos". Descubrí que NSIS Patch Gen hizo lo que yo quería bastante con la menor cantidad de molestias. La documentación es un poco delgada, pero una vez que lo resuelves piensas "Oh yeh".

Probablemente tenga un pequeño problema con un Registro de cambios generado automáticamente. Le sugiero que cree el Registro de cambios usted mismo (o al menos agregue los cambios adicionales al mismo con cada cambio de aplicación que realice) y simplemente inclúyalo como si fuera un archivo de aplicación normal y deje que el generador de parches lo actualice.

http://sourceforge.net/projects/nsispatchgen/

0

Algunos compiladores como Delphi hacen una gran cantidad de cambios en la final ejecutable incluso si cambia una pequeña parte de su código.

Por lo tanto, primero debe ver si vale la pena parchar.

Otra consideración es parchear por sí mismo. La aplicación de parches puede estar bloqueada por algún software antivirus especialmente en algunas carpetas del sistema.

y, finalmente, el tamaño de datos de parches incrementales puede crecer más allá de los archivos originales.

Basándome en los temas anteriores, no sugiero que se apliquen parches. Use instaladores completos en su lugar

1

¿Está familiarizado con cURL? http://www.shininglightpro.com/products/Win32OpenSSL.html http://curl.haxx.se/download.html#openssl

se descargará cualquier protocolo, y se puede utilizar para descargar los archivos. es una aplicación de línea de comandos.

en el instalador, programe un programa que debería verificar primero si el programa principal se está ejecutando o no y salga si se está ejecutando si no, llama a curl para descargar un archivo por lotes de su sitio con las actualizaciones, luego ejecuta el archivo por lotes
el archivo de proceso por lotes que descarga actualiza la aplicación al descargar los archivos correctos usando curl. el proceso debería ejecutarse quizás cada 2 semanas o una vez al mes, según la frecuencia con la que actualice.

la parte de desinstalación del instalador debe ser capaz de eliminar todas las partes de la aplicación en cuestión, incluidas las actualizaciones. esto se puede lograr eliminando todos los archivos de ese subdirectorio de los archivos de programa.

RMDir /r /REBOOTOK '$INSTDIR' 
RMDir /r /REBOOTOK "$SMPROGRAMS\$StartMenuFolder" 
Delete '$SMPROGRAMS\$StartMenuFolder\gpl3license.lnk' 
Delete '$SMPROGRAMS\$StartMenuFolder\readme.lnk' 
Delete '$SMPROGRAMS\$StartMenuFolder\${PRODUCT_TITLE}.lnk' 
DeleteRegKey HKCU "Software\Your major subkey\${PRODUCT_NAME}" 
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 
DeleteRegKey /ifempty HKCU "Software\${PRODUCT_NAME}" 

PRODUCT_NAME es un! Define que he creado porque utilizo estos archivos nsi como una plantilla. esto es solo una parte de la sección de desinstalación del archivo instalador.

Cuestiones relacionadas