Difference between revisions of "Packages.xml:Spanish"

From WPKG | Open Source Software Deployment and Distribution
Jump to: navigation, search
(Vea también)
(Acciones)
 
(23 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Este documento en otros idiomas: [[Packages.xml|English]] [[Packages.xml:French|French]]
+
Este documento en otros idiomas: [[Packages.xml|Inglés]] [[Packages.xml:French|Francés]]
 
----
 
----
  
'''packages.xml''' es el fichero que indica como realizar las instalaciones, actualizaciones y desinstalaciones de los paquetes de software. En otras palabras, es la lista de todos los programas y scripts que pueden ser instalados o ejecutados en las estaciones de trabajo..
+
'''packages.xml''' es el fichero que indica como realizar las instalaciones, actualizaciones y desinstalaciones de los paquetes de software. En otras palabras, es la lista de todos los programas y scripts que pueden ser instalados o ejecutados en las estaciones de trabajo.
  
 
Este fichero se localiza en el mismo directorio que [[wpkg.js]].
 
Este fichero se localiza en el mismo directorio que [[wpkg.js]].
Line 72: Line 72:
 
* '''execute''' ''(opcional)'' - ver [[Execute_once_/_always]]
 
* '''execute''' ''(opcional)'' - ver [[Execute_once_/_always]]
  
== Check conditions / check type ==
+
== Comprobar condiciones / tipos de comprobaciones ==
  
Of course it would be unwise to launch the installer if the software is already installed. That's why there are "check conditions".
+
WPKG utiliza las condiciones de verificación de las cláusulas '''check''' para verificar que una aplicación está instalada. Para ello, si todas las condiciones indicadas en el paquete con la clausula '''check''' son ciertas, WPKG, entiende que la aplicación está instalada.
  
The check conditions are also used after the installer has finished to verify that the software has actually been successfully installed.
+
Por supuesto, no sería prudente lanzar el instalador de una aplicación que ya está instalada. Por eso tiene sentido, "comprobar las condiciones".
  
If no check statements exist in the package, WPKG will just run the install (or upgrade) commands and (as long as no error occurs) will add/update the package details in the local client database.
+
Las condiciones de verificación, también se comprueban después de que la instalación haya finalizado para verificar que el software se ha comportado de forma satisfactoria durante la misma, es decir, se ha instalado correctamente.
  
Check conditions are broken down into 4 categories:
+
Si no existen sentencias de comprobación en el paquete (cláusulas '''check'''), WPKG actuará ejecutando los comandos de instalación (o actualización) y (si no se detectan errores) añadirá/actualizará los detalles del paquete en la base de datos local del cliente; pero nunca desinstalará el paquete. Dicho de otra forma, para que WPKG desinstale un paquete hemos tenido que incluir clausulas '''check''' obligatoriamente en el paquete y todas han de verificarse como ciertas.
  
*'''Registry''' - Checks the registry for conditions
+
Estas condiciones de comprobación (claúsulas '''check''') se pueden dividir en 4 categorías:
*'''File''' - Verifies various information about files within the filesystem
+
*'''Uninstall''' - Checks the software installation registry key (as displayed in Windows' Add/Remove Programs section) for the existence of an existing package
+
*'''Execute''' - Executes a script and checks the returning errorlevel (since WPKG 1.1.0)
+
*'''Logical''' can also be used
+
  
===Registry===
+
*'''Registry''' - Comprueba condiciones del registro de Windows
 +
*'''File''' - Verifica diferentes informaciones sobre los archivos y el sistema de archivos
 +
*'''Uninstall''' - Comprueba la información de desinstalación en el registro de Windows (que Windows utiliza en la lista de agregar/quitar programas para desinstalar)
 +
*'''Execute''' - Ejecuta un script y comprueba el valor de "errorlevel" devuelto por la ejecución (desde la versión WPKG 1.1.0)
 +
*'''Logical''' también puede ser utilizado.
  
Registry checks allow you to check for the existence of or a specific value in a registry key ('''Note''': for pre-1.0 versions,
+
==Registry==
it works on a registry value only, not a registry key!).
+
  
Beware, there is a limitation of the RegRead method used by WPKG's Registry checks to query registry values which contain backslashes ('\'). See the Execute section below to use instead to address this issue.
+
Registry permite comprobar la existencia de una clave del registro con un determinado valor ('''Nota''': en pre-1.0 versions, sólo trabaja comprobando un valor del registro, no la existencia de una clave).
  
There are two possible conditions available for registry checks:  ''exists'' and ''equals''.
 
  
<div style="margin-left: 30px">
+
Cuidado, hay una limitación en el método de lectura de valores del registro que utiliza WPKG para buscar las claves que contienen el caracter ('\'). Vea la sección de ejecución más abajo para abordar esta cuestión.
'''exists''' - This checks for the existence of a registry key. If the registry key is found, the condition returns true, otherwise it returns false.
+
  
'''equals''' - This checks a specific value of a registry key. If the registry value is found and that value is equal to the supplied value, the condition returns true, otherwise it returns false.
+
Hay dos posibles condiciones disponibles para las comprobaciones del registro: ''exists'' y ''equals''.
 +
 
 +
<div style="margin-left: 30px">
 +
'''exists''' - Esto comprueba la existencia de una clave del registro. Si se encuentra la clave, la condición devuelve ''true'', en caso contrario devuelveeee ''false''.
 +
'''equals''' - Comprueba un valor específico de una clave del registro. Si se encuentra la clave y el valor es igual al proporcionado, la condición devuelve ''true'', en caso contrario ''false''.
 
</div>
 
</div>
  
Examples:
+
Ejemplos:
  
This checks for the existence of Adobe Reader within the registry:
+
Esto comprueba la existencia de Adobe Reader dentro del registro:
  
 
<source lang="xml">
 
<source lang="xml">
Line 111: Line 112:
 
</source>
 
</source>
  
This checks to see if Firefox, US English, version 1.5.0.6, is installed:
+
Esto comprueba si la versión instalada de Firefox es la de idioma US English, con número de versión 1.5.0.6:
  
 
<source lang="xml">
 
<source lang="xml">
Line 120: Line 121:
 
===File===
 
===File===
  
File checks allow you to check for the existence of a file, check for a particular file's size, or examine version information about a file. There are several possible conditions available for file checks:
+
Para comprobar la existencia de un fichero, su tamaño en concreto, o la información de versión del archivo. Hay varias posibles condiciones disponibles para las comprobaciones:
  
 
<div style="margin-left: 30px">
 
<div style="margin-left: 30px">
'''exists''' - This checks for the existence of a file. If the file is found, the condition returns true.
+
'''exists''' - Esto comprueba la existencia de un fichero. Si el fichero existe, la condición devuelve ''true''.
 +
 
 +
'''sizeequals''' - Esto comprueba el tamaño de un fichero. Si se encuentra el archivo y su tamaño es el mismo que el suministrado en la condición, devuelve ''true''.
  
'''sizeequals''' - This checks the size of a file. If the file is found and the size equals the value supplied, the condition returns true.
+
'''versionsmallerthan''' - Comprueba la versión de un fichero en particular. Si se encuentra el archivo y su versión es inferior al número de versión suministrado, la condición devuelve ''true''.
  
'''versionsmallerthan''' - This checks the version of a particular file. If the file is found and the version is less than the supplied version number, the condition returns true.
+
'''versionlessorequal''' - Comprueba la versión de un fichero en particular. Si el fichero se encuentra y la versión es inferior o igual a la suministrada en la condición, devuelve ''true''.
  
'''versionlessorequal''' - This checks the version of a particular file. If the file is found and the version is less than or equal to the supplied version number, the condition returns true.
+
'''versionequalto''' - Comprueba la versión de un fichero en particular. Si se encuentra el fichero y su versión es igual a la proporcionada en la condición devuelve ''true''.
  
'''versionequalto''' - This checks the version of a particular file. If the file is found and the version is equal to the supplied version number, the condition returns true.
+
'''versiongreaterorequal''' - Comprueba la versión de un fichero en particular. Si se encuentra el fichero y su versión es mayor o igual a la proporcionada en la condición devuelve ''true''.
  
'''versiongreaterorequal''' - This checks the version of a particular file. If the file is found and the version is greater than or equal to the supplied version number, the condition returns true.
+
'''versiongreaterthan''' - Comprueba la versión de un fichero en particular. Si se encuentra el fichero y su versión es mayor que la proporcionada en la condición devuelve ''true''.
  
'''versiongreaterthan''' - This checks the version of a particular file.  If the file is found and the version is greater than the supplied version number, the condition returns true.
 
 
</div>
 
</div>
  
Examples:
+
Ejemplos:
  
This checks for the existence of Adobe Reader within the filesystem:
+
Esto comprueba si existe Adobe Reader dentro del sistema de archivos:
  
 
<source lang="xml">
 
<source lang="xml">
Line 146: Line 148:
 
</source>
 
</source>
  
This checks to see if Firefox US English version 1.5.0.6 is installed based on the file size of the executable:
+
Esto comprueba si la versión si está instalada la el Firefox US English version 1.5.0.6 comprobando la coincidencia del tamaño de su fichero ejecutable:
  
 
<source lang="xml">
 
<source lang="xml">
 
<check type="file" condition="sizeequals" path="%PROGRAMFILES%\Mozilla Firefox\firefox.exe" value="7183469" />
 
<check type="file" condition="sizeequals" path="%PROGRAMFILES%\Mozilla Firefox\firefox.exe" value="7183469" />
 
</source>
 
</source>
 
+
Coprueba si la versión del ejecutable de Firefox (.exe) que está instalado es inferior a la 1.5.0.6:
This checks whether the version of Firefox .exe that's currently installed is less than 1.5.0.6:
+
  
 
<source lang="xml">
 
<source lang="xml">
Line 161: Line 162:
 
===Uninstall===
 
===Uninstall===
  
Uninstall checks allow you to check the Microsoft software installation registry keys (as displayed in Windows' Add/Remove Programs section) for the existence of a particular package. Microsoft maintains the list
+
La desinstalación le permite comprobar la instalación de software según las claves de registro de Microsoft (visualizado por Windows en la sección de agregar o quitar programas), y asi comprobar si se ha instalado una aplicación particular. Microsoft mantiene la lista de aplicaciones instaladas y disponibles para desinstalar en la clave de registro ''HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall''. El valor de DisplayName de una entrada en particular es lo que se pretende encontrar. Versiones pre-1.1.de WPKG disponen sólo de la condición de comprobar si esta opción ''existe''.
of applications installed and available for uninstallation in the ''HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall'' registry key. The value in the DisplayName key of a particular package is what's matched by this check.  
+
pre-1.1.0 versions of WPKG have only one condition available for this option: ''exists''.
+
  
 
<div style="margin-left: 30px">
 
<div style="margin-left: 30px">
'''exists''' - This checks for the existence of the particular software package in the installation database. If the package is found, the condition returns true.
+
'''exists''' - Esto comprueba la existencia de un paquete de software en particular en la base de datos de instalaciones. Si el paquete se encuentra, la condición devuelve ''true''.
 
</div>
 
</div>
  
Since version 1.1.0 this check is extended with several other conditions:
+
Desde la versión 1.1.0 la comprobación se extiende con otras condiciones:
  
 
<div style="margin-left: 30px">
 
<div style="margin-left: 30px">
'''versionsmallerthan''' - This checks for the existence of a particular software package in the installation database and also checks the version of that software package. If the package is found, and the version is smaller than the supplied value, the condition returns true.
+
'''versionsmallerthan''' - Esto comprueba la existencia de un paquete en particular in la base de datos de instalaciones y también comprueba la versión de ese software. Si se encuentra el pquete y la versión es más pequeña que el valor proporcionado, la condición devuelve ''true''.
  
'''versionlessorequal''' - This checks for the existence of a particular software package in the installation database and also checks the version of that software package. If the package is found, and the version is less than or equal to the supplied value, the condition returns true.
+
'''versionlessorequal''' - idem., con menor o igual...
  
'''versionequalto''' - This checks for the existence of a particular software package in the installation database and also checks the version of that software package. If the package is found, and the version is equal to the supplied value, the condition returns true.
+
'''versionequalto''' - idem., con igual...
  
'''versiongreaterorequal''' - This checks for the existence of a particular software package in the installation database and also checks the version of that software package. If the package is found, and the version is greater than or equal to the supplied value, the condition returns true.
+
'''versiongreaterorequal''' - idem., con mayor o igual...
  
'''versiongreaterthan''' - This checks for the existence of a particular software package in the installation database and also checks the version of that software package. If the package is found, and the version is greater than the supplied value, the condition returns true.
+
'''versiongreaterthan''' - idem., con mayor que...
 
</div>
 
</div>
  
Examples:
+
Ejemplos:
  
This checks for the existence of Adobe Reader through the installation list:
+
Esto comprueba que está instalado Adobe Reader através de la lista de instalaciones:
  
 
<source lang="xml">
 
<source lang="xml">
Line 191: Line 190:
 
</source>
 
</source>
  
This checks to see if Firefox version 1.5.0.6 is installed in the installation list:
+
Esto comprueba si la versión de Firefox, 1.5.0.6 está instalada en la lista de instalaciones:
  
 
<source lang="xml">
 
<source lang="xml">
Line 197: Line 196:
 
</source>
 
</source>
  
This checks for the existence of The Gimp 2.6.6 or higher through the installation list:
+
Esto compruba la existencia de la aplicación Gimp 2.6.6 o superior en la lista de programas instalados:
  
 
<source lang="xml">
 
<source lang="xml">
 
<check type="uninstall" condition="versiongreaterorequal" path="GIMP" value="2.6.6" />
 
<check type="uninstall" condition="versiongreaterorequal" path="GIMP" value="2.6.6" />
 
</source>
 
</source>
 
  
 
===Execute===
 
===Execute===
  
Execute allows you to execute any script which checks if an application is installed. WPKG checks the exit code of the script to determine the existence of the particular software package.
+
Permite ejecutar un script para comprobar si una aplicación está instalada. WPKG comprueba el código de finalización del script para determinar la existencia del paquete.
This type of check also allows very complex checks. For example there is a limitation of the RegRead method used by WPKG's Registry checks to query registry values which contain backslashes '\'. Now you can execute a batch script which checks for such registry values using 'reg query ...'.  
+
 
There are several possible conditions available for execute checks:
+
Este tipo de comprobaciones también permite complejas verificaciones. Por ejemplo hay una limitación en el método de lectura del registro utilizado por WPKG para comprobar valores que contienen el carácter '\'. Ahora puede ejecutar un 'script de tipo batch' que compruebe el valor del registro utilizando 'reg query ...'.  
 +
 
 +
Hay varias posibles condiciones disponibles para conocer los resultados de las comprobaciones:
  
 
<div style="margin-left: 30px">
 
<div style="margin-left: 30px">
'''exitcodesmallerthan''' - This checks the exit code of the executed script. If the exit code is smaller than the supplied value, the condition returns true.
+
'''exitcodesmallerthan''' - Esto comprueba que el código de salida del script ejecutado es inferior al dato proporcionado, en cuyo caso devuelve ''true''.
  
'''exitcodelessorequal''' - This checks the exit code of the executed script. If the exit code is less or equal to the supplied value, the condition returns true.
+
'''exitcodelessorequal''' - idem., con menor o igual...
  
'''exitcodeequalto''' - This checks the exit code of the executed script. If the exit code is equal to the supplied value, the condition returns true.
+
'''exitcodeequalto''' - idme., con igual...
  
'''exitcodegreaterorequal''' - This checks the exit code of the executed script. If the exit code is greater than of equal to the supplied value, the condition returns true.
+
'''exitcodegreaterorequal''' - idem., con mayor o igual...
  
'''exitcodegreaterthan''' - This checks the exit code of the executed script. If the exit code is greater than the supplied value, the condition returns true.
+
'''exitcodegreaterthan''' - idem., con mayor que...
 
</div>
 
</div>
  
Examples:
+
Ejemplos:
  
This evaluates true if the exit code is negative
+
Ésto comprueba que el código de salida sea negativo, en cuyo caso devuelve ''true'':
 
<source lang="xml">
 
<source lang="xml">
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodesmallerthan" value="0">
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodesmallerthan" value="0">
 
</source>
 
</source>
  
This evalueates true if exit code is 0 or negative
+
Ésto será cierto si el código de salida es 0 o negativo:
 
<source lang="xml">
 
<source lang="xml">
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodelessorequal" value="0" >
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodelessorequal" value="0" >
 
</source>
 
</source>
  
This evaluates true only if exit code is exactly 0  
+
Ésto sólo es cierto cuando el código de salida sea exactamete 0:
 
<source lang="xml">
 
<source lang="xml">
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodeequalto" value="0" >
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodeequalto" value="0" >
 
</source>
 
</source>
  
This evaluates true if exit code is 0 or any positive number
+
Ésto será cierto si el código de salida es 0 o cualquier número positivo:
 
<source lang="xml">
 
<source lang="xml">
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterorequal" value="0" >
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterorequal" value="0" >
 
</source>
 
</source>
  
This evaluates true if exit code is any positive number
+
Ésto sólo será cierto cuando el código de salida sea positivo:
 
<source lang="xml">
 
<source lang="xml">
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterthan" value="0" >
 
<check type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterthan" value="0" >
 
</source>
 
</source>
  
===Logical Conditions===
+
===Condiciones lógicas===
  
There can be zero or more conditions verified during the existence checks. If no conditions are supplied, WPKG attempts to install the package regardless of whether it's currently
+
Pueden existir 0 o más condiciones a verificar durante las comprobaciones de existencia. Si no se han proporcionado condiciones, WPKG intenta instalar el paquete a menos que ya esté instalado. Para facilitar utilizar más de una condición, hay 4 tipos de condiciones que pueden ser utilizados, llamados condiciones lógicasLas condiciones lógicas le permiten crear multiples condiciones mientras se comprueba la exitencia del paquete. Las condiciones lógicas son las condiciones de primer nivel, con las condiciones de verificación real como subnodos en el XML.
installed or not. To facilitate using more than one condition, there is a 4th type of condition that can be added, called the logical conditionLogical conditions allow you to create
+
multiple conditions while checking for the presence of an existing package. Logical conditions are top level conditions, with the real check conditions as subnodes in the XML.
+
  
The following logical conditions are available: ''not'', ''and'', ''or'', ''atleast'', and ''atmost''.
+
Las siguientes condiciones lógicas están disponibles: ''not'', ''and'', ''or'', ''atleast'', y ''atmost''.
*) both ''atleast'' and ''atmost'' do require the parameter ''value=''
+
*) ambas: ''atleast'' y ''atmost'' requieren el parámetro ''value=''
  
Examples:
+
Ejemplos:
  
Let's say, for the sake of argument, that you have an Adobe Reader 7.0.8 package that you want installed, but you only want it installed on workstations
+
Digamos que, por ejemplo tiene un Adobe Reader 7.0.8 como paquete para instalar, pero sólo desea que se instale en estaciones de trabajo que ejecuten Windows XP Service Pack 2 o superior, debido a alguna incompatibilidad extraña. Digamos también que algunas estaciones de trabajo no pueden ser
that are running Windows XP Service Pack 2 or higher, due to some strange incompatibility. Let's also say that some workstations can't be
+
actualizadas a Windows XP Service Pack 2 hasta que dispongan por ejemplo de una actualización de memoria de 256 MB a 512 MB de memoria. Para un escenario como este, puede (y probablemente debería!) utilizar varios perfiles de los puestos de trabajo, disponiendo del Service Pack 1 en un perfil, mientras que las estaciones de trabajo con SP2 están en otro. Sin embargo, sólo a modo de ejemplo, digamos que todas las estaciones se encuentran en un único perfil. Puede proporcionar una condición lógica para que sólo las estaciones de trabajo que corran SP2 se acualicen con Adobe Reader 7.0.8:
upgraded to Windows XP Service Pack 2 until those workstations are upgraded from 256MB of memory to 512MB of memory. For a scenario like this, you could
+
(and probably should!) use multiple profiles and have those SP1 workstations in one profile, while the SP2 workstations are in another. However, just
+
for example purposes, let's say all workstations are in a single profile. You can provide a logical condition in order for only those workstations
+
running SP2 to be upgraded to Adobe Reader 7.0.8:
+
  
 
<source lang="xml">
 
<source lang="xml">
Line 274: Line 268:
 
</source>
 
</source>
  
The 2nd condition here might seem counter intuitive, but remember that you're looking for the absence of things rather than the existence of things when you're writing
+
La segunda condición aquí puede parecer contraria a la intuición, pero recuerde que estamos buscado la asencia de cosas, cuando estamos escribiendo condiciones de chequeo. Lo que la condicionr anterior dice es: ¿Está instalado Adobe Reader 7.0.8 o el Service Pack 1? Si cada una de estas condiciones son cirtas, la instalación se evitará. En este caso particular, no está instalado Adobe Reader 7.0.8, pero el valor CSDVersion del Service Pack 1 (en las cajas del SP1)
check conditions. What the above condition says is "Is Adobe Reader 7.0.8 installed or is Service Pack 1 installed? If either of these conditions equates to true,
+
por lo que el software no se instalará.
the installation will be skipped. In this particular case, Adobe Reader 7.0.8 isn't installed, but the value of CSDVersion is Service Pack 1 (for the SP1 boxes)
+
so the software will not be installed.
+
  
Once all conditions have been tested, if the final result of the conditions is equal to false, WPKG will try to execute the "'''install cmd'''".
+
Una vez que todas las condiciones se han probado, si el resultado final de las condiciones es igual a false, WPKG tratará de ejecutar el comando"'''instalar cmd'''".
  
 +
Una vez que se ejecuta, WPKG comprobará el código de salida (debe ser 0 en este ejemplo) '''*y*''' verificar todos las comprobaciones.
  
After it's executed, WPKG will check the exit code (should be 0 in this example) '''*and*''' verify all the checks.
+
Si '''*cualquiera*''' de las comprobaciones no se cumple, el software se considera '''*no*''' instalado - por eso introducir estos valores con cuidado!
  
 +
Además, si no se han especificado comprobaciones, WPKG dirá que la instalación ha fallado. Aunque esto es útil para casos en los que desea instalar el paquete de cada vez que WPKG se ejecute, es probable que desee la instalación sin ningún error - ver [[Execute once / always]] para la ejecución de paquetes sin ningún tipo de comprobación.
  
If '''*any*''' of the checks are not met, software is considered '''*not*''' installed - so enter these values carefully!
+
Recuerde que no es necesario especificar las tres condiciones de verificación, por lo general una es suficiente: si el software que está a punto de instalar aparecerá en Windows "Agregar o quitar programas (y no todos lo hacen), es suficiente con especificar sólo la comprobación de "'''uninstall'''".
  
 +
==Acciones==
  
Also, if no checks were specified, WPKG will say that the installation have failed. Although this is useful for cases where you want to install the package every time WPKG runs, you will probably want the installation without an error - see [[Execute once / always]] for executing packages without any checks.
+
WPKG comprende varias acciones: '''install''' (instalar), '''upgrade''' (actualizar), '''downgrade''' (desactualizar), '''remove''' (desinstalar) and '''download''' (descargar). Se pueden ejecutar multiples comandos para cada una de estas acciones, y WPKG las ejecutará según el orden en que aparezcan en el programa.
  
 +
El comado '''install''' se ejecutará por WPKG cuando un paquete nuevo aparezca en el ámbito de un perfil. 
  
Remember that you don't have to specify all three check conditions, usually one is enough: if the software you are about to install will show up in Windows' Add/Remove Programs (and not all do), it is sufficient to specify just the "'''uninstall'''" check.
+
Los comandos '''upgrade''' se ejecutarán cuando una nueva revisión del paquete se corresponda con el ámbito de ejecución. Esto es, cuando el número de '''revision''' en el fichero '''packages.xml''' del servidor sea mayor que el que aparezca en el fichero local '''wpkg.xml'''.  Tenga en cuenta que los comandos de actualización se ejecutarán incluso si las condiciones ya se cumplen.
  
==Actions==
+
El comando de desactualización, '''downgrade''' será ejecutado si la versión instalada en el cliente es más moderna que la del lado del servidor.
  
WPKG understands several actions: '''install''', '''upgrade''', '''downgrade''', '''remove''' and '''download'''.  Multiple commands for each of these actions can be listed in the config file and WPKG will execute them in the order they are listed.
 
  
The '''install''' commands are executed by WPKG when a new package comes into scope for a profile.
+
El comando de desinstalación, '''remove''' será ejecutado cuando el paquete se elimine del perfil '''profile.xml'''.
  
The '''upgrade''' commands are executed when a new revision of a package comes into scope. That is, when the '''revision''' number in the '''packages.xml''' file on the server is larger than the one in the local '''wpkg.xml''' file.  Note that the upgrade commands will be run even if the check conditions are already met.
+
El comando de descarga, '''download''' será siempre ejecutado cuando se usan en el nivel de paquete global. Desde la versión de WPKG 1.1.0 sin embargo, este comando también se permite como subnodo de cualquiera de los otros comandos. Esto le permite realizar una descarga que sólo se efectuará desde un comando específico. Esto se implementó así, ya que sólo tiene sentido descargar el paquete de instalación de nuevo justo antes de eliminar los comandos que serán ejecutados (los cuales habitualmente ejecutan un comando de desinstalación local que no necesita el instalador original).  
  
The '''downgrade''' commands are executed if the version installed on the client is newer than the one on the server side.  
+
'''Nota:''' Si múltiples acciones instalación (o actualización/desactualización/descarga/desinstalación) se indican, WPKG will descargará los archivos, de todos los nodos de comandos de la misma clase antes de comenzar a ejecutar los comandos en secuencia.  
  
The '''remove''' commands are executed when a package is removed from a profile.
+
En muchos de los ejemplos de la sección [[:Category:Silent_Installers]], cmd.exe se ejecuta para realizar la expansión de variables de entorno y utiliza 'arrancar/esperar' esperando la finalización del comando. Esta forma de ejecutar comandos tiene el resultado de que la ventana de ejecución de cmd aparezca en la pantalla. Sin embargo, este método no parece ser necesario. La versión actual de WPKG ejecuta comandos utilizando la función WScript.Shell.Exec() y realiza la expansión de variables antes de su ejecución. WPKG entonces espera hasta que el comando se complete antes de continuar.
  
The '''download''' commands are always executed when used on the global package level. Since WPKG version 1.1.0 however, this command is also allowed as a sub-node of any of the other commands. This allows you to specify a download which is only downloaded for a specific command. This was implemented since it usually makes no sense to download the installation package again right before the remove commands are executed (which usually runs a local uninstall command which does not need the original installer). '''Note:''' If multiple install (or upgrade/downgrade/remove) commands are specified WPKG will download the the files of all command nodes of the same kind before starting to execute the commands in sequence.  
+
El método correcto de ejecutar un intérprete de comandos es utilizar la variable de entorno %comspec%, sin especificar explícitamente '''cmd.exe'''. Esto es necesario para ejecutar comandos que estén implementados en el propio intérprete, sin necesidad de ficheros ejecutables externos.
  
In many of the examples in the [[:Category:Silent_Installers]] section, cmd.exe is executed to perform environment variable expansion and to use 'start /wait' to wait on the command being executed.  This method of executing commands results in cmd windows appearing on screen.  However, this method does not appear to be necessary. The current version of WPKG executes commands using the WScript.Shell.Exec() function and expands environment variables before execution.  WPKG then waits until the command is completed before continuing.
+
Cuando la salida de un comando sea demasiado grande (cosas como: copy, calcls), el comando puede fallar. Hay que redirigir en estos casos la salida a un fichero NUL (ejemplo: "%command% >nul").
  
The correct method of executing a command interpreter is to use the %comspec% environment variable, not specifying cmd.exe explicitly.  This is needed to run commands that are built into the interpreter and are not separate executables.
+
Ejemplos típicos:
 
+
When the output of a command (think of: copy,cacls) is too much, the command will fail. You have to redirect the output to NUL or a file (example: "%command% >nul").
+
 
+
Typical examples:
+
  
 
<source lang="xml">
 
<source lang="xml">
Line 323: Line 314:
 
</source>
 
</source>
  
The timeout option ([[Timeouts]]) tells WPKG how long to wait for the command to complete. It is in seconds and the default is 3600 seconds.
+
La opción '''timeout''' ([[Timeouts]]) dice a WPKG cuando tiempo tiene que esperar a que se complete el comando. Esto se indica en segundos, y su valor por defecto son 3600 seconds= 120 minutos= 2 horas.
 +
 
 +
Si el comando indicado devuelve un valor de "0", entonces WPKG asume que la ejecución fué satisfactoria y continua con el siguiente comando; en caso contrario, si el comando devuelve un valor diferente a cero, entonces WPKG para y guarda en LOG el fallo del paquete. A veces, códigos diferentes a cero se esperan, y también pueden ser aceptados. Puedes hacer esto añadiendo secciones de códigos de salida dentro de la sencción de instalacion, como se indica:
  
If the command you specify returns a value of "0" then wpkg assumes it was successful and continues with the next command, if any. If the command returns a nonzero value, then wpkg stops and logs a failure for the package.  Sometimes nonzero exit codes are expected and you want to accept them.  You can do this by adding exit code sections inside the install section, like this:
 
 
<source lang="xml">
 
<source lang="xml">
 
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" >
 
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" >
Line 333: Line 325:
 
</source>
 
</source>
  
If you don't care about exit code, use <code>exit code="any"</code>:
+
Si no le preocupa el código de finalización, utilize <code>exit code="any"</code>:
 +
 
 
<source lang="xml">
 
<source lang="xml">
 
<install cmd="msiexec /qn /i %SOFTWARE%\installer.exe /silent" >
 
<install cmd="msiexec /qn /i %SOFTWARE%\installer.exe /silent" >
Line 340: Line 333:
 
</source>
 
</source>
  
 +
Puede especificar una acción de reinicio del equipo para ciertos códigos de finalización como en el siguiente ejemplo:
  
You can set a specific reboot action for certain exit codes with something like the following:
 
 
<source lang="xml">
 
<source lang="xml">
 
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" >
 
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" >
Line 349: Line 342:
 
</source>
 
</source>
  
The options for the exit code reboot are:
+
Las opciones para el código de salida para reiniciar son:
  
* true - immediate reboot, without updating wpkg.xml
+
* true - reiniciar inmediatamente, sin actualizar el fichero local WPKG.XML
* delayed - reboot once the package action is complete and wpkg.xml is updated
+
* delayed - reiniciar una vez que la acción el paquete se haya completado y el fichero local WPKG.XML se haya actualizado
* postponed - reboot once all the packages have been processed
+
* postponed - reiniciar sólo cuando todos los paquetes se hayan procesado
  
Please note that the target value for a download action is always relative to the downloadDir defined in wpkg.js (and there's currently no configuration option to change this from the default of %TEMP%).
+
Tenga en cuenta que el valor objetivo de una acción de descarga es siempre relativo al directorio '''DownloadDir'' definido en '''WPKG.js''' (y no hay actualmente ninguna opción de configuración para cambiar esto desde el valor predeterminado de %TEMP%).
  
==Quick examples==
+
==Ejemplos rápidos==
  
Other example - WPKG checks if the package is installed only in Windows' Add/Remove Programs before deciding to install it (to make sure it is not installed already):
+
Otro ejemplo - WPKG comprueba si el paquete ha sido ya instalado en la parte de Windows de 'agregar o quitar programas' exclusivamente antes de decidir instalarlo (para asegurarse de que no ha sido instalado previamente):
  
 
<source lang="xml">
 
<source lang="xml">
Line 384: Line 377:
 
</source>
 
</source>
  
 
+
En el siguiete no hay condiciones de comprobación. Esto significa que WPKG lo ejecutará cada vez que el equipo arranque e instalará el software:
 
+
In the example below, there are no check conditions.
+
This means that WPKG will execute it each time - so this is rather useful for executing scripts that need to be run each time the machine is booted, than installing software:
+
  
 
<source lang="xml">
 
<source lang="xml">
Line 407: Line 397:
  
  
Similar example, without any conditions, either.
+
Ejemplo similar, también sin condiciones. Tenga en cuenta la entrada '''execute="once"''' - esto significa que este script sólo será ejecutado una vez. Esto puede ser útil para tareas que sólo han de realizarse una vez, como desfragmentaciones de disco, algunos test, cambiar impresoras, etc.
Note the '''execute="once"''' entry - this means that that script will be executed only once. It is useful for the tasks you want
+
to do one time only, like disk defragmenting, some testing, changing printers etc.
+
  
 
<source lang="xml">
 
<source lang="xml">
Line 424: Line 412:
 
</source>
 
</source>
  
Similarly, you may want to execute a program or script each time - use "always" instead of "once". For more info on this functionality, check [[Execute_once_/_always|here]].
+
De forma similar, si desea ejecutar una aplicación o un script siempre - utilice "always" en lugar de "once". Para más información sobre esta funcionalidad vea [[Execute_once_/_always|esto]].
  
==Package dependencies==
+
==Dependencias de paquetes==
  
Packages can also depend on other packages, see [[package dependencies]] for more info.
+
Los paquetes también pueden depender de otros paquetes, vea [[package dependencies]] para más información.
  
 +
==Archivos XML con paquetes individuales==
  
==Individual XML package files==
+
Si prefiere mantener su descripción de paquete XML en archivos separados, puede hacer esto: Crear una carpeta <code>packages</code> donde guardar <code>wpkg.js</code>, y localizar los ficheros individuales en ella (p.e.: thunderbird.xml, firefox.xml, etc.,). La sintaxis es la misma que en '''packages.xml'''.
  
If you would rather keep your package XML description in separate files, you can of course do that: just create a <code>packages</code> directory where <code>wpkg.js</code> is, and place individual XML files there (i.e., thunderbird.xml, firefox.xml etc.). The syntax is the same as that of packages.xml.
+
Tenga en cuenta que si decide disponer todos los paquetes en ficheros separados, todavía necesita un archivo <code>packages.xml</code>, con al menos una entrada como:
 
+
Note, if you decide to keep all your packages in separate XML files, you still need a <code>packages.xml</code> file, which should at least contain an empty entry:
+
  
 
<source lang="xml">
 
<source lang="xml">
Line 443: Line 430:
 
</source>
 
</source>
  
 
+
A continuación un ejemplo de un fichero individual con una sóla entrada - advierta que debe contener las sentencias <packages> y </packages> al principio y al final del mismo respectivamente:
Here is an example of an individual XML file - note that it must contain <packages> at the beginning and </packages> at the end:
+
  
 
<source lang="xml">
 
<source lang="xml">
Line 460: Line 446:
 
</source>
 
</source>
  
WARNING! Please note for this example: The password is visible in the local copy of wpkg.xml, so remove after installation, or better yet, use the command in a separate .bat file.
+
¡ATENCIÓN! Advierta en este ejemplo que el password será visivle en la copia local, en el archivo '''WPKG.xml''', eso hay que quitarlo después de finalizar la instalación, o mejor todavía, utilice el comando en un archivo '''.bat''' separado.
 +
 
 +
 
 +
'''Puede utilizar el siguiente script para convertir/mezclar los ficheros XML individuales en uno único.''' (Esto es preferible en redes con una latencia alta).
  
 +
Nota: Este script debe ser ejecutado dentre del directorio de paquetes. Este script no comprueba la sintáxis XML de los archivos. Deberían eliminarse después el directorio. Sobreescribe el fichero packages.xml.
  
'''You can use the following script to convert/merge your individual XML files into one.''' (I use it for high latency networks).
 
Note: you must run this script from within the packages directory; it ignores badly formed XML documents (and prints a warning); you should remove your packages directory afterwards; it will overwrite your packages.xml file.
 
 
<source lang="bash">
 
<source lang="bash">
 
#!/bin/bash
 
#!/bin/bash

Latest revision as of 13:30, 19 November 2010

Este documento en otros idiomas: Inglés Francés


packages.xml es el fichero que indica como realizar las instalaciones, actualizaciones y desinstalaciones de los paquetes de software. En otras palabras, es la lista de todos los programas y scripts que pueden ser instalados o ejecutados en las estaciones de trabajo.

Este fichero se localiza en el mismo directorio que wpkg.js.

WPKG no trabajará sin este fichero.

Estructura de packages.xml

La estructura básica de packages.xml es la siguiente:

<packages>
<package
id="wpkg1"
name="Windows Packager sample 1"
revision="1"
reboot="false"
priority="0">
<check type="registry" condition="exists" path="HKLM\Software\wpkg\full\key\not\part\of\it" />
<check type="file" condition="exists" path="%PROGRAMFILES%\wpkg\wpkg.bat" />
<check type="uninstall" condition="exists" path="WPKG" />

<install cmd='msiexec /i (path to msi)'>
<exit code="0" />
</install>

<remove  cmd='%PROGRAMFILES%\uninstall\uninst.exe -quiet' />

<upgrade cmd='msiexec /i (path to msi)' />

</package>

</packages>

Cada paquete tiene los siguientes atributos:

  • id - un identificador único que representa al paquete. Debería ser corto y representativo.
  • name - descripción de texto del paquete. Esto debería ser el nombre completo del producto.
  • revision - un número de versión creado por el usuario que representa la "versión" específica del "WPKG package" para esta instalación. Si cambias el paquete ".XML", incrementalo. Puede ser la revisión del paquete para WPKG, o la versión del programa de software (aunque tenga en cuenta que esta estrategia no evitará que tenga que cambiar el número de versión, cada vez que modifique el fichero de paquete, por ejemplo cuando realize una mejora o corrija un bug en este fichero XML, y la aplicación de software ya esté actualizada).
    • Los siguientes formatos son soportados:
      • un entero (1, 10, 1000, etc.)
      • números de versión separados por puntos (1.1, 2.1.4, 3.200.3987, etc.) ... introducidos en WPKG 1.0
      • revisiones volátiles (1.2RC1, 1.5I32, 2.73M24, 1.65.b, etc.) ... introducidas en WPKG 1.1.1 (mirar el changelog para más ejemplos)
    • Si le gusta hacer un seguimiento de fechas de los últimos cambios realizados en el paquete, en lugar del número de revisión, puede utilizar el formato YYYY.MM.DD (2010.07.27, etc.)
    • Además puede definir una variable dentro del paquete y utilizarla como revisión, lo que puede ser útil si se utiliza en diferentes lugares del paquete (revisión del paquete, camino para instalar, comprobaciones.) ... introducidos en WPKG 1.1.2:
<package 
  id="firefox"
  name="Mozilla Firefox"
  revision="%PKG_VERSION%"
  reboot="false"
  priority="10">

  <variable name="PKG_VERSION" value="3.6.8" />
  • reboot - indica si el sistema debe "rebotar" tras realizar con éxito la instalación, desinstalación o actualización de un paquete.
    • true - siempre reiniciar después de procesar satisfactoriamente el paquete.
    • postponed - reiniciar después de que WPKG halla terminado de procesar todos los paquetes, si los controles del paquete tienen éxito después de la acción.
    • cualquier otra cosa - no causa el reinicio debidoa este paquete. Otros paquetes todavía sí pueden forzar la reiniciación.
  • priority - especifica un valor numérico que determina en que orden el paquete será instalado. Los números mayores, la mayor prioridad, y por eso, el primer paquete que se instalará será el que tenga la mayor prioridad. Por ejemplo:
    • 2 - instala este paquete el primero
    • 1 - instala este paquete el segundo
    • 0 - instala este paquete el tercero

Note que la instalación de un paquete con la prioridad de '5' se instará antes que cualquiera de estos.

Comprobar condiciones / tipos de comprobaciones

WPKG utiliza las condiciones de verificación de las cláusulas check para verificar que una aplicación está instalada. Para ello, si todas las condiciones indicadas en el paquete con la clausula check son ciertas, WPKG, entiende que la aplicación está instalada.

Por supuesto, no sería prudente lanzar el instalador de una aplicación que ya está instalada. Por eso tiene sentido, "comprobar las condiciones".

Las condiciones de verificación, también se comprueban después de que la instalación haya finalizado para verificar que el software se ha comportado de forma satisfactoria durante la misma, es decir, se ha instalado correctamente.

Si no existen sentencias de comprobación en el paquete (cláusulas check), WPKG actuará ejecutando los comandos de instalación (o actualización) y (si no se detectan errores) añadirá/actualizará los detalles del paquete en la base de datos local del cliente; pero nunca desinstalará el paquete. Dicho de otra forma, para que WPKG desinstale un paquete hemos tenido que incluir clausulas check obligatoriamente en el paquete y todas han de verificarse como ciertas.

Estas condiciones de comprobación (claúsulas check) se pueden dividir en 4 categorías:

  • Registry - Comprueba condiciones del registro de Windows
  • File - Verifica diferentes informaciones sobre los archivos y el sistema de archivos
  • Uninstall - Comprueba la información de desinstalación en el registro de Windows (que Windows utiliza en la lista de agregar/quitar programas para desinstalar)
  • Execute - Ejecuta un script y comprueba el valor de "errorlevel" devuelto por la ejecución (desde la versión WPKG 1.1.0)
  • Logical también puede ser utilizado.

Registry

Registry permite comprobar la existencia de una clave del registro con un determinado valor (Nota: en pre-1.0 versions, sólo trabaja comprobando un valor del registro, no la existencia de una clave).


Cuidado, hay una limitación en el método de lectura de valores del registro que utiliza WPKG para buscar las claves que contienen el caracter ('\'). Vea la sección de ejecución más abajo para abordar esta cuestión.

Hay dos posibles condiciones disponibles para las comprobaciones del registro: exists y equals.

exists - Esto comprueba la existencia de una clave del registro. Si se encuentra la clave, la condición devuelve true, en caso contrario devuelveeee false. equals - Comprueba un valor específico de una clave del registro. Si se encuentra la clave y el valor es igual al proporcionado, la condición devuelve true, en caso contrario false.

Ejemplos:

Esto comprueba la existencia de Adobe Reader dentro del registro:

<check type="registry" condition="exists" path="HKLM\Software\Adobe\Adobe Reader\7.0" />

Esto comprueba si la versión instalada de Firefox es la de idioma US English, con número de versión 1.5.0.6:

<check type="registry" condition="equals" path="HKLM\Software\Mozilla\Mozilla Firefox\CurrentVersion" value="1.5.0.6 (en-US)" />


File

Para comprobar la existencia de un fichero, su tamaño en concreto, o la información de versión del archivo. Hay varias posibles condiciones disponibles para las comprobaciones:

exists - Esto comprueba la existencia de un fichero. Si el fichero existe, la condición devuelve true.

sizeequals - Esto comprueba el tamaño de un fichero. Si se encuentra el archivo y su tamaño es el mismo que el suministrado en la condición, devuelve true.

versionsmallerthan - Comprueba la versión de un fichero en particular. Si se encuentra el archivo y su versión es inferior al número de versión suministrado, la condición devuelve true.

versionlessorequal - Comprueba la versión de un fichero en particular. Si el fichero se encuentra y la versión es inferior o igual a la suministrada en la condición, devuelve true.

versionequalto - Comprueba la versión de un fichero en particular. Si se encuentra el fichero y su versión es igual a la proporcionada en la condición devuelve true.

versiongreaterorequal - Comprueba la versión de un fichero en particular. Si se encuentra el fichero y su versión es mayor o igual a la proporcionada en la condición devuelve true.

versiongreaterthan - Comprueba la versión de un fichero en particular. Si se encuentra el fichero y su versión es mayor que la proporcionada en la condición devuelve true.

Ejemplos:

Esto comprueba si existe Adobe Reader dentro del sistema de archivos:

<check type="file" condition="exists" path="%PROGRAMFILES%\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" />

Esto comprueba si la versión si está instalada la el Firefox US English version 1.5.0.6 comprobando la coincidencia del tamaño de su fichero ejecutable:

<check type="file" condition="sizeequals" path="%PROGRAMFILES%\Mozilla Firefox\firefox.exe" value="7183469" />

Coprueba si la versión del ejecutable de Firefox (.exe) que está instalado es inferior a la 1.5.0.6:

<check type="file" condition="versionsmallerthan" path="%PROGRAMFILES%\Mozilla Firefox\firefox.exe" value="1.5.0.6" />


Uninstall

La desinstalación le permite comprobar la instalación de software según las claves de registro de Microsoft (visualizado por Windows en la sección de agregar o quitar programas), y asi comprobar si se ha instalado una aplicación particular. Microsoft mantiene la lista de aplicaciones instaladas y disponibles para desinstalar en la clave de registro HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall. El valor de DisplayName de una entrada en particular es lo que se pretende encontrar. Versiones pre-1.1.de WPKG disponen sólo de la condición de comprobar si esta opción existe.

exists - Esto comprueba la existencia de un paquete de software en particular en la base de datos de instalaciones. Si el paquete se encuentra, la condición devuelve true.

Desde la versión 1.1.0 la comprobación se extiende con otras condiciones:

versionsmallerthan - Esto comprueba la existencia de un paquete en particular in la base de datos de instalaciones y también comprueba la versión de ese software. Si se encuentra el pquete y la versión es más pequeña que el valor proporcionado, la condición devuelve true.

versionlessorequal - idem., con menor o igual...

versionequalto - idem., con igual...

versiongreaterorequal - idem., con mayor o igual...

versiongreaterthan - idem., con mayor que...

Ejemplos:

Esto comprueba que está instalado Adobe Reader através de la lista de instalaciones:

<check type="uninstall" condition="exists" path="Adobe Reader 7.0" />

Esto comprueba si la versión de Firefox, 1.5.0.6 está instalada en la lista de instalaciones:

<check type="uninstall" condition="exists" path="Mozilla Firefox (1.5.0.6)" />

Esto compruba la existencia de la aplicación Gimp 2.6.6 o superior en la lista de programas instalados:

<check type="uninstall" condition="versiongreaterorequal" path="GIMP" value="2.6.6" />

Execute

Permite ejecutar un script para comprobar si una aplicación está instalada. WPKG comprueba el código de finalización del script para determinar la existencia del paquete.

Este tipo de comprobaciones también permite complejas verificaciones. Por ejemplo hay una limitación en el método de lectura del registro utilizado por WPKG para comprobar valores que contienen el carácter '\'. Ahora puede ejecutar un 'script de tipo batch' que compruebe el valor del registro utilizando 'reg query ...'.

Hay varias posibles condiciones disponibles para conocer los resultados de las comprobaciones:

exitcodesmallerthan - Esto comprueba que el código de salida del script ejecutado es inferior al dato proporcionado, en cuyo caso devuelve true.

exitcodelessorequal - idem., con menor o igual...

exitcodeequalto - idme., con igual...

exitcodegreaterorequal - idem., con mayor o igual...

exitcodegreaterthan - idem., con mayor que...

Ejemplos:

Ésto comprueba que el código de salida sea negativo, en cuyo caso devuelve true:

<check type="execute" path="\\path\to\script.cmd" condition="exitcodesmallerthan" value="0">

Ésto será cierto si el código de salida es 0 o negativo:

<check type="execute" path="\\path\to\script.cmd" condition="exitcodelessorequal" value="0" >

Ésto sólo es cierto cuando el código de salida sea exactamete 0:

<check type="execute" path="\\path\to\script.cmd" condition="exitcodeequalto" value="0" >

Ésto será cierto si el código de salida es 0 o cualquier número positivo:

<check type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterorequal" value="0" >

Ésto sólo será cierto cuando el código de salida sea positivo:

<check type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterthan" value="0" >

Condiciones lógicas

Pueden existir 0 o más condiciones a verificar durante las comprobaciones de existencia. Si no se han proporcionado condiciones, WPKG intenta instalar el paquete a menos que ya esté instalado. Para facilitar utilizar más de una condición, hay 4 tipos de condiciones que pueden ser utilizados, llamados condiciones lógicas. Las condiciones lógicas le permiten crear multiples condiciones mientras se comprueba la exitencia del paquete. Las condiciones lógicas son las condiciones de primer nivel, con las condiciones de verificación real como subnodos en el XML.

Las siguientes condiciones lógicas están disponibles: not, and, or, atleast, y atmost.

  • ) ambas: atleast y atmost requieren el parámetro value=

Ejemplos:

Digamos que, por ejemplo tiene un Adobe Reader 7.0.8 como paquete para instalar, pero sólo desea que se instale en estaciones de trabajo que ejecuten Windows XP Service Pack 2 o superior, debido a alguna incompatibilidad extraña. Digamos también que algunas estaciones de trabajo no pueden ser actualizadas a Windows XP Service Pack 2 hasta que dispongan por ejemplo de una actualización de memoria de 256 MB a 512 MB de memoria. Para un escenario como este, puede (y probablemente debería!) utilizar varios perfiles de los puestos de trabajo, disponiendo del Service Pack 1 en un perfil, mientras que las estaciones de trabajo con SP2 están en otro. Sin embargo, sólo a modo de ejemplo, digamos que todas las estaciones se encuentran en un único perfil. Puede proporcionar una condición lógica para que sólo las estaciones de trabajo que corran SP2 se acualicen con Adobe Reader 7.0.8:

<check type="logical" condition="or">
   <check type="registry" condition="exists" path="HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Acrobat Reader\7.0\Installer\Updates\708" />
   <check type="registry" condition="equals" path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CSDVersion" value="Service Pack 1" />
</check>

La segunda condición aquí puede parecer contraria a la intuición, pero recuerde que estamos buscado la asencia de cosas, cuando estamos escribiendo condiciones de chequeo. Lo que la condicionr anterior dice es: ¿Está instalado Adobe Reader 7.0.8 o el Service Pack 1? Si cada una de estas condiciones son cirtas, la instalación se evitará. En este caso particular, no está instalado Adobe Reader 7.0.8, pero el valor CSDVersion del Service Pack 1 (en las cajas del SP1) por lo que el software no se instalará.

Una vez que todas las condiciones se han probado, si el resultado final de las condiciones es igual a false, WPKG tratará de ejecutar el comando"instalar cmd".

Una vez que se ejecuta, WPKG comprobará el código de salida (debe ser 0 en este ejemplo) *y* verificar todos las comprobaciones.

Si *cualquiera* de las comprobaciones no se cumple, el software se considera *no* instalado - por eso introducir estos valores con cuidado!

Además, si no se han especificado comprobaciones, WPKG dirá que la instalación ha fallado. Aunque esto es útil para casos en los que desea instalar el paquete de cada vez que WPKG se ejecute, es probable que desee la instalación sin ningún error - ver Execute once / always para la ejecución de paquetes sin ningún tipo de comprobación.

Recuerde que no es necesario especificar las tres condiciones de verificación, por lo general una es suficiente: si el software que está a punto de instalar aparecerá en Windows "Agregar o quitar programas (y no todos lo hacen), es suficiente con especificar sólo la comprobación de "uninstall".

Acciones

WPKG comprende varias acciones: install (instalar), upgrade (actualizar), downgrade (desactualizar), remove (desinstalar) and download (descargar). Se pueden ejecutar multiples comandos para cada una de estas acciones, y WPKG las ejecutará según el orden en que aparezcan en el programa.

El comado install se ejecutará por WPKG cuando un paquete nuevo aparezca en el ámbito de un perfil.

Los comandos upgrade se ejecutarán cuando una nueva revisión del paquete se corresponda con el ámbito de ejecución. Esto es, cuando el número de revision en el fichero packages.xml del servidor sea mayor que el que aparezca en el fichero local wpkg.xml. Tenga en cuenta que los comandos de actualización se ejecutarán incluso si las condiciones ya se cumplen.

El comando de desactualización, downgrade será ejecutado si la versión instalada en el cliente es más moderna que la del lado del servidor.


El comando de desinstalación, remove será ejecutado cuando el paquete se elimine del perfil profile.xml.

El comando de descarga, download será siempre ejecutado cuando se usan en el nivel de paquete global. Desde la versión de WPKG 1.1.0 sin embargo, este comando también se permite como subnodo de cualquiera de los otros comandos. Esto le permite realizar una descarga que sólo se efectuará desde un comando específico. Esto se implementó así, ya que sólo tiene sentido descargar el paquete de instalación de nuevo justo antes de eliminar los comandos que serán ejecutados (los cuales habitualmente ejecutan un comando de desinstalación local que no necesita el instalador original).

Nota: Si múltiples acciones instalación (o actualización/desactualización/descarga/desinstalación) se indican, WPKG will descargará los archivos, de todos los nodos de comandos de la misma clase antes de comenzar a ejecutar los comandos en secuencia.

En muchos de los ejemplos de la sección Category:Silent_Installers, cmd.exe se ejecuta para realizar la expansión de variables de entorno y utiliza 'arrancar/esperar' esperando la finalización del comando. Esta forma de ejecutar comandos tiene el resultado de que la ventana de ejecución de cmd aparezca en la pantalla. Sin embargo, este método no parece ser necesario. La versión actual de WPKG ejecuta comandos utilizando la función WScript.Shell.Exec() y realiza la expansión de variables antes de su ejecución. WPKG entonces espera hasta que el comando se complete antes de continuar.

El método correcto de ejecutar un intérprete de comandos es utilizar la variable de entorno %comspec%, sin especificar explícitamente cmd.exe. Esto es necesario para ejecutar comandos que estén implementados en el propio intérprete, sin necesidad de ficheros ejecutables externos.

Cuando la salida de un comando sea demasiado grande (cosas como: copy, calcls), el comando puede fallar. Hay que redirigir en estos casos la salida a un fichero NUL (ejemplo: "%command% >nul").

Ejemplos típicos:

<download url='http://wpkg.example.com/installers/some.msi' target="installers\some.msi" />
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" />
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" timeout="1800" />
<install cmd="%comspec% /c copy %SOFTWARE%\file.dll %WINDIR%" />
<remove cmd="msiexec /qn /x %SOFTWARE%\package.msi" />

La opción timeout (Timeouts) dice a WPKG cuando tiempo tiene que esperar a que se complete el comando. Esto se indica en segundos, y su valor por defecto son 3600 seconds= 120 minutos= 2 horas.

Si el comando indicado devuelve un valor de "0", entonces WPKG asume que la ejecución fué satisfactoria y continua con el siguiente comando; en caso contrario, si el comando devuelve un valor diferente a cero, entonces WPKG para y guarda en LOG el fallo del paquete. A veces, códigos diferentes a cero se esperan, y también pueden ser aceptados. Puedes hacer esto añadiendo secciones de códigos de salida dentro de la sencción de instalacion, como se indica:

<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" >
    <exit code="0" />
    <exit code="259" />
</install>

Si no le preocupa el código de finalización, utilize exit code="any":

<install cmd="msiexec /qn /i %SOFTWARE%\installer.exe /silent" >
    <exit code="any" />
</install>

Puede especificar una acción de reinicio del equipo para ciertos códigos de finalización como en el siguiente ejemplo:

<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" >
    <exit code="3010" reboot="true" />
    <exit code="0" />
</install>

Las opciones para el código de salida para reiniciar son:

  • true - reiniciar inmediatamente, sin actualizar el fichero local WPKG.XML
  • delayed - reiniciar una vez que la acción el paquete se haya completado y el fichero local WPKG.XML se haya actualizado
  • postponed - reiniciar sólo cuando todos los paquetes se hayan procesado

Tenga en cuenta que el valor objetivo de una acción de descarga es siempre relativo al directorio DownloadDir definido en WPKG.js' (y no hay actualmente ninguna opción de configuración para cambiar esto desde el valor predeterminado de %TEMP%).

Ejemplos rápidos

Otro ejemplo - WPKG comprueba si el paquete ha sido ya instalado en la parte de Windows de 'agregar o quitar programas' exclusivamente antes de decidir instalarlo (para asegurarse de que no ha sido instalado previamente):

<package
id="wpkg3"
name="Windows Packager sample 3"
revision="1"
reboot="false"
priority="1">

<!--
This is a comment.
Checks in Windows' Add/Remove Programs only.
-->
<check type="uninstall" condition="exists" path="WPKG" />

<install cmd='%PACKAGES%\package.exe /quiet /install' />

<remove  cmd='%PACKAGES%\package.exe /quiet /uninstall' />

<upgrade cmd='%PACKAGES%\package.exe /quiet /install' />

</package>

En el siguiete no hay condiciones de comprobación. Esto significa que WPKG lo ejecutará cada vez que el equipo arranque e instalará el software:

<package
id="backupfiles"
name="Makes backup of some file"
revision="1"
reboot="false"
priority="0">

<!--
This is a comment.
'''No check conditions; script will be executed *each time* wpkg.js is called - each time PC is booted.'''
-->

<install cmd='\\server\path\script.bat' />
</package>


Ejemplo similar, también sin condiciones. Tenga en cuenta la entrada execute="once" - esto significa que este script sólo será ejecutado una vez. Esto puede ser útil para tareas que sólo han de realizarse una vez, como desfragmentaciones de disco, algunos test, cambiar impresoras, etc.

<package
id="backupfiles"
name="Makes backup of some file"
revision="1"
reboot="false"
execute="once"
priority="0">

<install cmd='\\server\path\script.bat' />
</package>

De forma similar, si desea ejecutar una aplicación o un script siempre - utilice "always" en lugar de "once". Para más información sobre esta funcionalidad vea esto.

Dependencias de paquetes

Los paquetes también pueden depender de otros paquetes, vea package dependencies para más información.

Archivos XML con paquetes individuales

Si prefiere mantener su descripción de paquete XML en archivos separados, puede hacer esto: Crear una carpeta packages donde guardar wpkg.js, y localizar los ficheros individuales en ella (p.e.: thunderbird.xml, firefox.xml, etc.,). La sintaxis es la misma que en packages.xml.

Tenga en cuenta que si decide disponer todos los paquetes en ficheros separados, todavía necesita un archivo packages.xml, con al menos una entrada como:

<?xml version="1.0" encoding="UTF-8"?>
<packages>
</packages>

A continuación un ejemplo de un fichero individual con una sóla entrada - advierta que debe contener las sentencias <packages> y </packages> al principio y al final del mismo respectivamente:

<?xml version="1.0" encoding="UTF-8"?>
<packages>
 <package id="setadminpassword"
          name="Set admin password"
          revision="1"
          priority="999"
          reboot="false"
          execute="once">
       <install cmd='cmd /c net user administrator password' />
 </package>
</packages>

¡ATENCIÓN! Advierta en este ejemplo que el password será visivle en la copia local, en el archivo WPKG.xml, eso hay que quitarlo después de finalizar la instalación, o mejor todavía, utilice el comando en un archivo .bat separado.


Puede utilizar el siguiente script para convertir/mezclar los ficheros XML individuales en uno único. (Esto es preferible en redes con una latencia alta).

Nota: Este script debe ser ejecutado dentre del directorio de paquetes. Este script no comprueba la sintáxis XML de los archivos. Deberían eliminarse después el directorio. Sobreescribe el fichero packages.xml.

#!/bin/bash
echo '<?xml version="1.0" encoding="UTF-8"?>' > ../packages.xml
echo '<packages>' >> ../packages.xml
for package in `ls *.xml`
	do
		xmlwf $package | grep "not well-formed"
		if [ "$?" == "1" ]; then
		   cat $package | sed -e :a -e 's/<\(\(\/\)*packages\)[^>]*>//g;/</N;//ba' | sed -e :a -e 's/<?xml.*>//g;/</N;//ba' >>../packages.xml
		fi
done
echo '</packages>' >> ../packages.xml

Vea también