Esta sección describe el script de instalación.
Creando un script de instalación
Usted deseará generalmente alguna forma de control sobre el proceso de instalacion. Por ejemplo, usted puede desear comprobar versiones de archivos e instalar solamente archivos actualizados, o quizás usted desea aplicar parches a los archivos existentes. El script de instalación es lo suficiente flexible para permitirle desinstalar archivos. Por esta razón, los instaladores incluyen un script de instalación para manejar el proceso de la instalación.
El script de instalación se debe llamar install.js y se debe colocar en el nivel superior del archivo del instalador. El script contendrá código Javascript que ejecutará varias funciones de instalación.
En un documento HTML, o un documento XUL, el objeto window
es el objeto global de la raíz. Eso significa que usted puede llamar los métodos del objeto window
sin usar el calificador antes de la llamada, lo que significa que window.open(…) se puede escribir simplemente open(…). En un script de instalación, no hay ventana asociada, sin embargo el objeto global será un objeto Install
que contiene varias funciones para personalizar el proceso de instalación. Algunas de las funciones del objeto Install
serán descritas abajo.
El script de instalación debe seguir los siguientes pasos:
- Inicie la instalación especificando qué paquete y versión está siendo instalada.
- Utilice las funciones de instalación para indicar qué archivos y directorios necesitan ser instalados. Usted puede también fijar los archivos que se moverán y serán suprimidos.
- Comience el proceso de instalar los archivos necesarios.
Es importante observar que durante el paso dos, usted indica solamente qué archivos deben ser instalados y que suceda cualquier otra operación que usted desee. Ningún archivo se copia hasta el paso tres. Debido a esto, usted puede especificar fácilmente un número de archivos que se instalarán, viene a través de una cierta clase de error, y aborta el proceso entero sin la modificación del sistema del usuario.
El Registro de Componentes
Mozilla mantiene un archivo que es un registro de todos los componentes que están instalados actualmente. Los componentes incluyen los nuevos paquetes de chrome, skins y extensiones. Cuando un nuevo componente es instalado, el registro se actualiza. El registro almacena los archivos y la información de versión de los componentes instalados. De esa forma, es más fácil comprobar si una versión de su componente está presente y actualizarlo solamente en caso de necesidad.
Los componentes del registro trabajan como el registro de Windows. Consiste en una jerarquía de llaves y de valores. Usted no necesita saber mucho sobre eso para crear aplicaciones XUL a menos que usted esté creando sus propios componentes XPCOM.
Lo qué usted necesita saber para una instalación es que el registro almacena un sistema de información sobre su aplicación, tal como la lista del archivo y las versiones. Toda esta información se almacena en una llave (y dentro de subkeys) que usted proporciona en la escritura de la instalación (en el paso 1 mencionado arriba).
Esta llave esta estructurada como un directorio de la trayectoria de la forma siguiente:
/Author/Package Nombre
Substituya la palabra Author por su nombre y substituya el nombre del paquete por el nombre del paquete que usted está instalando. Por ejemplo:
/Xulplanet/Find Files /Netscape/Personal Security Manager
El primer ejemplo es el que utilizaremos para el diálogo de búsqueda de archivos. El segundo es la llave usada para el Personal Security Manager.
Iniciar la Instalación
El objeto Install
tiene una función, initInstall, que se puede utilizar para iniciar la instalación. Debe ser ejecutada al principio de su script de instalación. La sintaxis de esta función es como sigue:
initInstall( packageName , regPackage , version );
Ejemplo:
initInstall("Find Files","/Xulplanet/Find Files","0.5.0.0");
El primer parámetro es el nombre del paquete en forma legible. El segundo parámtro es la llave del registro usada para guardar la información del paquete según lo descrito antes. El tercer parámetro es la versión del paquete que esta siendo instalado.
Después, necesitamos definir el directorio donde serán instalados los archivos. Hay dos maneras de hacer esto. El método simple asigna un directorio de la instalación e instala todos los archivos en él. El segundo método permite que usted asigne una destinación basándose en el archivo-por-archivo (o directorio). El primer método se describe abajo.
La función setPackageFolder asigna un directorio de la instalación. Para el diálogo de búsqueda de archivos, instalaremos los archivos en el directorio chrome. (realmente podría ponerlos dondequiera.) El setPackageFolder toma una discusión, el directorio donde sera instalado. Para una máxima portabilidad, usted no puede especificar una cadena de caracteres para el directorio. En lugar de eso, usted especifica un identificador de un directorio conocido y abre subdirectorios de él. Así, si sus aplicaciones necesitan instalar algunas bibliotecas de sistema, usted no necesitará saber el nombre de esos directorios.
Los identificadores de directorio se enumeran en XULPlanet reference. Para el directorio chrome, el identificador del directorio es 'Chrome'. La función getFolder se puede utilizar para conseguir uno de estos directorios especiales. Esta función tiene dos parámetros, el primero es el identificador y el segundo es un subdirectorio. Por ejemplo:
findDir = getFolder("Chrome","findfile"); setPackageFolder(findDir);
Aquí, conseguimos la carpeta findfile en la carpeta chrome y la pasamos directamente a la función del setPackageFolder. La segunda discusión al getFolder es el subdirectorio en el cual vamos a instalar, que no tiene que existir. Usted puede dejar esta discusión enteramente afuea si usted no necesita uno.
Especificar los archivos a instalar
Después, usted necesita especificar qué archivos deben ser instalados. Esto implica el uso de dos funciones, addDirectory y addFile. La función addDirectory le dice al instalador que un directorio del archivo XPI (y de todo su contenido) debe ser instalado a un lugar particular. El addFile es similar pero para un solo archivo.
Las funciones addDirectory y addFile tienen varias formas. Las más simples solo tienen una discusión, el directorio del instalador para instalar al directorio asignado de la instalación.
addDirectory ( dir ); addFile ( dir );
Ejemplo:
addDirectory("findfile");
El ejemplo anterior especificará que el directorio findfile del archivo del instalador debe ser instalado. Podemos llamar estas funciones múltiples veces para instalar otros archivos.
Después, desearemos colocar los archivos de busqeuda en el sistema del chrome para poderlo utilizar con un cromo URL. Esto se puede hacer con la función registerChrome. Toma dos discusiones, el primero es el tipo de chrome a colocarse (contenido, skin o ‘locale’). El segundo es el directorio que contiene el archivo de contents.rdf para colocarse. Porque el diálogo de los archivos de busqueda tiene contenido, un archivo skin y un archivo ‘locale’, el registerChrome necesitará ser abierto tres veces.
registerChrome(Install.CONTENT | Install.DELAYED_CHROME, getFolder(findDir, "content")); registerChrome(Install.SKIN | Install.DELAYED_CHROME, getFolder(findDir, "skin")); registerChrome(Install.LOCALE | Install.DELAYED_CHROME, getFolder(findDir, "locale"));
La bandera de DELAYED_CHROME se utiliza para indicar que el cromo debe ser instalado la próxima vez Mozilla está funcionado.
Terminar la Instalación
Las funciones addDirectory y addFile no copian ningun archivo. Indican solamente qué archivos deben ser instalados. Semejantemente, el registerChrome indica solamente que el chrome debe ser colocado. Para terminar el proceso y para comenzar a copiar archivos, abra la función performInstall. No toma ninguna discusión.
el script final para instalar el componente de búsqueda de archivos se muestra abajo:
Ejemplo
initInstall("Find Files","/Xulplanet/Find Files","0.5.0.0");
findDir = getFolder("Chrome","findfile");
setPackageFolder(findDir);
addDirectory("findfile");
registerChrome(Install.CONTENT | Install.DELAYED_CHROME, getFolder(findDir, "content"));
registerChrome(Install.SKIN | Install.DELAYED_CHROME, getFolder(findDir, "skin"));
registerChrome(Install.LOCALE | Install.DELAYED_CHROME, getFolder(findDir, "locale"));
performInstall();
A continuación veremos algunas funciones adicionales de instalación