qq Tres Reinos
NSIS (Nullsoft Scriptable Install System) es un programa de producción de instaladores de código abierto
para sistemas Windows. Proporciona instalación, desinstalación, configuración del sistema, descompresión de archivos y otras funciones. Como su nombre indica, NSIS utiliza su lenguaje de script para describir el comportamiento y la lógica del programa de instalación. El lenguaje de programación NSIS tiene una estructura y una sintaxis similares a los lenguajes de programación comunes, pero está diseñado para aplicaciones como instaladores. Los scripts NSIS generalmente tienen la extensión
nsi, admiten la función de inclusión y la extensión del archivo de encabezado es nsh. NSIS (Nullsoft Scriptable Install System) es un programa de producción de instaladores de código abierto para sistemas Windows. Proporciona instalación, desinstalación, configuración del sistema, descompresión de archivos y otras funciones. Como su nombre indica, NSIS utiliza su lenguaje de programación para describir el comportamiento y la lógica del programa de instalación. El lenguaje de programación NSIS tiene una estructura y una sintaxis similares a los lenguajes de programación comunes, pero está diseñado para aplicaciones como instaladores. Los scripts NSIS generalmente tienen nsi como extensión, admiten la función de inclusión y la extensión del archivo de encabezado es nsh.
Las características principales de NSIS son:
Baja sobrecarga, un programa de instalación con todas las funciones solo requiere 34k adicionales.
Soporta la mayoría de las plataformas Windows, incluyendo: Windows 9.x, Windows NT, Windows 2000, Windows XP, Windows 2003
Soporta tres algoritmos de compresión principales: Zlig, BZips, LZMA
p>Scripts de soporte
Admite múltiples idiomas
Admite personalización de la interfaz de instalación
Proporciona una interfaz de complemento escalable
Red de soporte instalación y parches
Admite modo de instalación desatendida
Además, la licencia NSIS permite su uso gratuito para cualquier propósito.
Desarrollar un programa de instalación de NSIS normalmente implica los siguientes pasos:
Determinar las funciones y elementos de la interfaz de la instalación
Escribir scripts de NSIS
Utilice el programa makensis o makensisw proporcionado por NSIS para compilar el script escrito en el paso 2 en un programa de instalación ejecutable.
Si hay algún problema, regrese al paso dos y repita.
En cualquier momento Con la popularidad de NSIS, han surgido algunos entornos de desarrollo de scripts NSIS de terceros, como HM NIS Edit y Venis IX. El primero es completamente de código abierto y el segundo solo es gratuito para uso personal y no personal. -uso comercial. En estos entornos de desarrollo integrados, los pasos 2 y 3 se pueden combinar fácilmente.
La estructura del script NSIS
El script NSIS (en adelante, script nsi) incluye principalmente propiedades, páginas, secciones y funciones del instalador.
Las propiedades se utilizan para definir el comportamiento y el estilo de la interfaz del instalador. La mayoría de estas propiedades son propiedades en tiempo de compilación, es decir, no se pueden cambiar en tiempo de ejecución.
La página hace referencia a la página del asistente del programa de instalación, por ejemplo:
Licencia de página
Componentes de página
Directorio de página
Archivos de instalación de página
UninstPage uninstConfirm
Archivos de instalación de UninstPage
La sección es la lógica de procesamiento correspondiente a una determinada opción de instalación/desinstalación. Esta sección. del código solo se usa cuando el usuario selecciona Se ejecutan las opciones correspondientes.
El nombre de la sección del desinstalador tiene el prefijo "un.", como se muestra en el siguiente ejemplo:
Sección "Sección del instalador"
SectionEnd
Sección " un.Uninstaller Sección "
SectionEnd
Se pueden usar muchas instrucciones en una sección para completar tareas como descomprimir archivos, leer y escribir el registro, crear directorios, crear accesos directos, etc. , pero las instrucciones más utilizadas son SetOutPath y File, el primero se usa para especificar la ubicación de destino y el segundo se usa para especificar el archivo. Ejemplo:
Sección "Mi Programa"
SetOutPath $INSTDIR
Archivo "Mi Programa.exe"
Archivo "Readme.txt "
SectionEnd
El modificador /o del nombre de la sección indica que la sección no está seleccionada de forma predeterminada, - indica una sección oculta (las secciones anónimas también son secciones ocultas)! Indica las secciones que deben mostrarse en negrita.
SectionIn representa la relación entre la sección y el tipo de instalación:
SectionIn insttype_index [insttype_index] ... [RO]
El modificador RO indica que es No es posible revisar.
La subsección se utiliza para contener varias secciones
SubSection [/e] Título [salida del índice del nombre de la subsección]
El modificador /e se utiliza para esta subsección Si todas Las secciones de una sección se expanden de forma predeterminada.
La función contiene lógica de instalación modular. Hay dos tipos de funciones en el script nsi: funciones definidas por el usuario y funciones de devolución de llamada. La función definida por el usuario solo se ejecutará cuando la llame la instrucción Call. Si no hay una instrucción de cancelación en el cuerpo de la función, el programa de instalación terminará de ejecutar la función definida por el usuario y continuará ejecutando la instrucción y las instrucciones Call.
La sintaxis de las funciones definidas por el usuario es la siguiente:
Función
# algunos comandos
FinFunción
p>
La siguiente sintaxis se utiliza para llamar a una función:
Llamar a
Se puede observar que no se pasan parámetros ni en la definición de la función o la llamada de la función. Por lo general, la transferencia de parámetros nsi se lleva a cabo mediante operaciones de pila Pop, Push y 20 variables de registro ~, $R0~$R9. El paso de parámetros también se puede completar mediante variables globales. Por ejemplo:
Var entrada;
Var salida;
Sección bla
DeteailPrint "la entrada es $entrada$\n" < / p>
Cuadrado de llamada
DeteailPrint "cuadrado de $entrada es $salida$\n"
SectionEnd
Cuadrado de función
salida = entrada^2
FunctionEnd
La función de devolución de llamada es un segmento de programa que se activa en un momento específico.
Funciones de devolución de llamada comúnmente utilizadas como .onInit:
Función .onInit
MessageBox MB_YESNO "Esto instalará Mi programa. ¿Desea continuar?" > Abortar
gogogo:
FunctionEnd
NSIS define las siguientes funciones de devolución de llamada para la lógica de instalación: .onGUIInit, .onInit, .onInstFailed, .onInstSuccess, .onGUIEnd ,.onMouseOverSection, .onRebootFailed, .onSelChange, .onUserAbort, .onVerifyInstDir
NSIS define las siguientes funciones de devolución de llamada para la lógica de desinstalación: un.onGUIInit, un.onInit, un.onUninstFailed, un.onUninstSuccess, un. onGUIEnd, un .onRebootFailed, un.onUserAbort
Definición de variable del script nsi
La definición de variable del script nsi utiliza la palabra clave Var, seguida del nombre de la variable. La variable es global y. distingue mayúsculas y minúsculas. Las referencias a variables deben tener el prefijo $.
Además de las variables definidas por el usuario, el script nsi define variables de registro~, $R0~$R9 para la transferencia de parámetros y variables del sistema para propósitos específicos. Estas variables incluyen principalmente:
$PROGRAMFILES, $COMMONFILES, $DESKTOP, $EXEDIR, $, $WINDIR, $SYSDIR, $TEMP, $STARTMENU, $SMPROGRAMS, $SMSTARTUP, $QUICKLAUNCH, $DOCUMENTS, $SENDTO, $RECENT , $F***ORITES, $MÚSICA, $FOTOS, $VIDEOS, $NETHOOD, $FONTS, $TEMPLATES, $APPDATA, $PRINTHOOD, $INTERNET_CACHE, $COOKIES, $HISTORY, $PROFILE, $ADMINTOOLS, $RESOURCES, $RESOURCES_LOCALIZED, $CDBURN_AREA, $HWNDPARENT, $PLUGINSDIR
Las funciones del sistema que se pueden usar para depurar en scripts nsi incluyen MessageBoxes, DetailPrint y Dumpstate.
Instrucciones del compilador para scripts nsi
Las instrucciones del compilador para scripts nsi se refieren principalmente a comandos que se ejecutan solo en tiempo de compilación. Estos comandos se utilizan principalmente para incluir archivos, compilación condicional, definir constantes, definir macros, etc. La definición de constantes y macros es la principal aplicación de las directivas del compilador.
Ejemplo de definición de constantes:
!define VERSIÓN "1.0.3"
Nombre "Mi Programa $"
OutFile "Mi Instalador del programa - $.exe"
Ejemplo de definición de una macro:
!macro MyFunc UN
Función $MyFunc
Llamar $ DoRegStuff
ReadRegStr HKLM Software\MyProgram key
DetailPrint
FunctionEnd
IU moderna
La UI moderna es la apariencia Imita el estilo de interfaz del último sistema Windows, que consta de una página de bienvenida, una página final y otras páginas de asistente.
Complementos
nsi admite complementos, a través de los cuales se pueden ampliar fácilmente las funciones del programa de instalación de NSIS. El complemento NSIS es una DLL escrita en C++, Delphi y otros lenguajes. Para llamar funciones en nsi en un script nsi, use la siguiente sintaxis:
DLLName::FunctionName "Parámetro 1" "Parámetro 2". " "Parámetro 3"
Ejemplo 1:
nsExec::ExecToLog '"$\makensis.exe" /CMDHELP'
Ejecutar el comando makensis.exe para mostrar el uso del comando.
Ejemplo 2:
InstallOptions::dialog "$PLUGINSDIR\test.ini"
Mostrar cuadro de diálogo
Ejemplo 3:
NSISdl::descargar /winamp/client/winamp291_lite.exe $R0
Descargar archivo
Estrategia del complemento de búsqueda de NSIS
Predeterminado A continuación, NSIS busca complementos en el subdirectorio Complementos de su directorio de instalación. Los usuarios pueden usar !addplugindir para especificar la ubicación del directorio del complemento agregado.
Sintaxis básica del script nsi
Comentarios
Utilice el signo de almohadilla "#" o punto y coma ";" para comentarios de una sola línea y c/C++ para comentarios cruzados. Comentarios de línea.
Tipo de datos
Número
Las constantes numéricas se pueden expresar en decimal, hexadecimal (0x es el prefijo), octal (0 es el prefijo) y El color es similar a la notación RGB en HTML, pero sin el signo de almohadilla "#".
Cadena
Las constantes de cadena se pueden citar entre comillas y los caracteres de escape tienen el prefijo "$\". Las representaciones de sintaxis NSI del signo de dólar, caracteres de escape comunes, avance de línea, retorno de carro y caracteres de tabulación son: $$,$\n,$\r,$\t
Carácter de continuación de línea
El script nsi utiliza la barra invertida "\" al final de la línea para indicar que la línea siguiente y la línea actual son lógicamente la misma línea
Archivo de encabezado predeterminado
Si hay uno en el mismo directorio que el archivo makensis nsisconf.nsh, este archivo se incluirá automáticamente a menos que se especifique la opción /NOCONFIG en el momento de la compilación
Etiqueta
nsi usa la La declaración GOTO y IfErrors, MessageBox, IfFileExists y StrCmp para el flujo de control del programa significan que la etiqueta es la declaración de destino de estas declaraciones. Sintaxis para la definición de etiquetas:
Etiqueta: Declaración
Las etiquetas deben definirse en funciones y secciones, y su alcance se limita a la sección o función en la que están definidas. Las etiquetas que comienzan con un punto "." son etiquetas globales.
Salto relativo
Los scripts NSI a menudo usan saltos relativos para indicar ramas condicionales. La sintaxis es [+-][1-9] y el signo más significa avanzar desde la corriente. Saltar, el signo menos significa saltar hacia atrás desde la posición actual. El número indica el número de declaraciones a las que saltar. Ejemplo:
Ir a +4
MessageBox MB_OK "Se omitirá el siguiente mensaje"
Ir a +3
MessageBox MB_OK "Usted nunca verá este cuadro de mensaje"
Ir a -3
MessageBox MB_OK "Listo"
Página
La página del asistente es la Instalación de NSIS El elemento de interfaz más importante del programa. Puede utilizar páginas integradas de NSIS o interfaces personalizadas en el script nsi. El orden, la apariencia de visualización y el comportamiento de las páginas se pueden especificar a través del script. La directiva Page se usa para definir la página en el instalador y UninstPage se usa para definirla. Además, la directiva PageEx proporciona funcionalidad de clase, pero proporciona más opciones. El orden de las páginas es coherente con el orden en que aparecen en el script nsi.
Ejemplo:
Licencia de página
Componentes de página
Directorio de página
Archivos de instalación de página
UninstPage uninstConfirm
Archivos inst de UninstPage
Especifica que el programa de instalación primero muestra la página de licencia, luego muestra la página de selección de componentes y luego muestra la página de selección del directorio de instalación.
Opciones de página
Diferentes páginas tienen diferentes opciones:
La página de licencia tiene LicenseText, LicenseData, LicenseForceSelection
Página de selección de componentes Hay; ComponentText;
La página de selección de directorio tiene DirText, DirVar (solo se puede usar en PageEx), DirVerify
La página de registro de instalación/desinstalación tiene DetailsButtonText, CompletedText;
La página de confirmación de desinstalación tiene DirVar (solo se puede usar en PageEx), UninstallText
Para la página integrada, NSIS admite tres funciones de devolución de llamada para interfaz personalizada y verificación, y para páginas personalizadas, NSIS admite tres funciones de devolución de llamada para interfaz personalizada y verificación. Dos funciones de devolución de llamada.
Sintaxis del comando de página
Licencia de página|componentes|directorio|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
O:
Página personalizada [creator_function] [leave_function] [caption]
Ejemplo:
Página licencia skipLicense "" StayInLicense
Página personalizada customPage "" ": página personalizada"
Archivos de instalación de página
Función skipLicense
MessageBox MB_YESNO "¿Quieres omitir la página de licencia?" IDNO no
Abortar
no:
FunctionEnd
Función StayInLicense
MessageBox MB_YESNO "¿Quieres permanecer en la página de licencia?"
Abortar
no:
FunctionEnd
Función customPage
GetTempFileName $R0
Archivo /oname=$R0 customPage.ini
InstallOptions::dialog $R0
Pop $R1
StrCmp $R1 "cancelar" hecho
StrCmp $R1 "atrás" hecho
StrCmp $R1 "éxito" hecho
error: MessageBox MB_OK|MB_ICONSTOP "Error de InstallOptions:$\r$\n$R1 "
hecho:
FunctionEnd
Sintaxis del comando UninstPage
UninstPage personalizado [creator_function] [leave_function] [caption]
O
UninstPage (licencia|componentes|directorio|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]
Sintaxis de PageEx
Uso de PageEx Estructuras anidadas, como:
licencia PageEx
LicenseText "Readme"
LicenseData readme.rtf
PageCallbacks licenciaPre licenciaMostrar licenciaLeave p>
p>
PageExEnd
Comandos nsi de uso común
nsi se puede dividir aproximadamente en comandos básicos, registro y
instrucciones de operación ini, instrucciones generales, instrucciones de control de procesos, instrucciones de operación de archivos, instrucciones de desinstalación, instrucciones de procesamiento de cadenas, instrucciones de soporte en varios idiomas e instrucciones de reinicio.
Los siguientes son comandos básicos de uso común:
Eliminar
Eliminar archivo [/REBOOTOK]
Exec
Comando ejecutivo
ExecShell
Comando de acción ExecShell [parámetros] [SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED]ExecShell "abrir" ejemplo"mand [user_var(código de salida)]
Ejemplo:
ExecWait '"$INSTDIR\someprogram.exe"'
ExecWait '"$INSTDIR\someprogram.exe"'
DetailPrint " algún programa devolvió "
Archivo
Archivo [/nonfatal] [/a] ([/r] [/x archivo|comodín [...]] (archivo|comodín ) [...] | /oname=file.dat infile.dat)
La opción /r se usa como modo recursivo, /x se usa para drenar archivos
Ejemplo:
Archivo algo.exe
Archivo /a algo.exe
Archivo *.exe
Archivo /r *.dat
Archivo /r datos
Archivo /oname=$TEMP\temp.dat somefile.ext
Archivo /nonfatal "un archivo que podría no existir"
Archivo /r /x CVS myproject
Archivo /r /x *.res /x *.obj /x *.pch fuente
Renombrar
Cambiar nombre [ /REBOOTOK] archivo_fuente archivo_destino
RMDir
RMDir [/r] [/REBOOTOK] nombre_directorio
La versión china de NSIS 2.35 agrega 4 nuevos complementos . Incorpora la última versión china de VNISEdit, con ayuda en chino de la versión 2.14, muy conveniente