Dieser Abschnitt beschreibt das Installationsskript.
Erstellen eines Installationsskripts
install.js
Dateien nicht weiter verwendet. Es sollte ein install.rdf
stattdessen erstellt werden.In der Regel möchten Sie den Installationsprozess steuern können. Zum Beispiel möchten Sie vielleicht Datei-Versionen überprüfen und nur aktualisierte Dateien installieren oder Sie möchten Fehler in existierenden Dateien beheben. Das Installationsskript ist flexibel genug, um sogar Dateien zu deinstallieren. Aus diesen Gründen sollten Installationen ein Installationsskript an Board haben, um den Installationsprozess zu regeln.
Das Installationsskript muss "install.js" genannt werden und muss im Wurzelverzeichnis des Installationsverzeichnisses platziert werden. Das Skript wird JavaScript Code enthalten, welcher eine Reihe von Installationsfunktionen aufruft.
In einem HTML Dokument oder einem XUL Dokument ist das "window" Objekt das Wurzelobjekt. Das bedeutet, dass Sie die Methoden des window-Objekts ohne einem Qualifier davor aufrufen können, zum Beipiel kann statt window.open()
einfach open()
geschrieben werden. In einem Installationsskript gibt es kein Fenster, jedoch ist das globale Objekt das Install Objekt, welches eine Reihe von Funktionen zur Anpassung des Installationsprozess mit sich bringt. Einige der Install-Ojekt Funktionen werden weiter unter beschrieben.
Das Installationsskript sollte die folgenden Schritte ausführen:
- Initialisiere die Installation in dem festgelegt wird, welche Version und Paket installiert werden soll.
- Benutze die Installationsfunktionen, um zu bestimmen, welche Dateien und Verzeichnisse installiert werden müssen. Sie können außerdem Dateien festlegen, die gelöscht oder verschoben werden sollen.
- Starte den Installationsprozess der nötigen Dateien.
Es ist wichtig zu beachten, dass während Schritt zwei, nur angegeben wird, welche Dateien installiert werden sollen und welche weiteren Operationen ausgeführt werden sollen. Es werden keine Dateien bis zum dritten Schritt kopiert. Sie können daher sehr einfach eine Reihe von Dateien festlegen, die installiert werden sollen, stolpern eventuell über einen Fehler und können den Prozess abbrechen, ohne dass das System des Benutzers verändert wird.
Die Komponentenregistrierung
Mozilla verfügt über eine Registrierungsdatei, welche alle Komponenten enthält, die momentan installiert sind. Komponenten sind Chrome Pakete, Skins und Plugins. Wird eine neue Komponente installiert, wird die Registrierungsdatei aktualisiert. Die Registrierung speichert auch Dateisets und Versionsinformationen über die installierten Komponenten. Daher ist es sehr einfach die Versionen Ihrer Komponente zu prüfen und zu ermitteln, ob die Komponente bereits verfügbar ist und eventuell aktualisiert werden muss.
Die Komponentenregistrierung arbeit ähnlich wie die Windows Registrierung. Sie besteht aus der hierarchischen Anordnung von Schlüsseln und Werten. Dabei müssen Sie nicht viel darüber wissen, um XUL Anwendungen zu erstellen, es sei denn Sie wollen eigene XPCOM Komponenten erstellen.
Was Sie für eine Installation wissen müssen, ist, dass die Registrierung eine Reihe von Informationen über Ihre Anwendung speichert, zum Beispiel eine Liste der Dateien und Versionen. Die gesamten Informationen werden in einem Schlüssel gespeichert (und in Unter-Schlüsseln), welche Sie im Installationsskript angeben (in Schritt eins oben genannt).
Dieser Schlüssel ist wie in Verzeichnissen in der folgenden Form strukturiert:
/Autor/Paketname
Ersetzen Sie das Wort "Author" mit Ihrem Name und "Paketname" mit dem Namen Ihres Pakets, welches Sie installieren möchten. Zum Beispiel:
/Xulplanet/Find Files /Netscape/Personal Security Manager
Das erste Beispiel werden wir für den Dateisuche-Dialog verwenden. Das zweite Beispiel wird vom Personal Security Manager benutzt.
Initialisierung der Installation
Das Install Objekt hat eine Funktion, initInstall(), welche
zur Initialisierung der Installation gebraucht wird. Es sollte am Anfang des Installationsskript aufgerufen werden. Die Syntax dieser Funktion ist die folgende:
initInstall( ''packageName'' , ''regPackage'' , ''version'' );
Ein Beispiel
initInstall("Find Files","/Xulplanet/Find Files","0.5.0.0");
- Das erste Argument ist der Name des Paketes in einer lesbaren Form.
- Das zweite Argument ist der Registrierungsschlüssel, welcher die Paketinformationen speichert.
- Das dritte Argument ist die Version des Pakets, welches installiert werden soll.
Als nächstes müssen wir das Verzeichnis festlegen, wo die Dateien installiert werden sollen. Es gibt zwei Möglichkeiten.
- Die einfache Methode ist, ein Installationsverzeichnis festzulegen und alle Datei dort zu installieren.
- Die zweite Methode erlaubt Ihnen ein Zielverzeichnis für einzelne Dateien zu bestimmen. Die erste Methode wird nun beschrieben.
Die Funktion setPackageFolder()
legt ein Installationsverzeichnis fest. Für den Dateisuche-Dialog werden wir die Dateien in das Chrome-Verzeichnis installieren. (Wir könnten sie überall speichern). Die Funktion setPackageFolder()
nimmt ein Argument an, das Installationsverzeichnis. Für maximale Portabilität kann kein String-Name für das Verzeichnis festgelegt werden. Stattdessen wird ein Identifier eines bekannten Verzeichnis verwendet und dann werden dort Unterverzeichnisse erstellt. Falls Ihre Anwendung Systembibliotheken installieren muss, brauchen Sie den Pfad dieser Verzeichnisse nicht zu wissen.
Die Verzeichnis-Identifiers sind in der XULPlanet Referenz aufgelistet. Für das Chrome-Verzeichnis ist der Identifier 'Chrome'. Die getFolder()
Funktion kann verwendet werden, um eine der speziellen Verzeichnisse zu bekommen. Diese Funktion nimmt zwei Argumente, das erste ist der Identifier und das zweite ist ein Unterverzeichnis. Zum Beispiel:
findDir = getFolder("Chrome","findfile"); setPackageFolder(findDir);
Hier bekommen wir das "findfile" Verzeichnis im Chrome-Ordner und reichen dies an die setPackageFolder()
Funktion weiter. Das zweite Argument für getFolder()
ist das Unterverzeichnis in dem wir installieren werden, was nicht bedeutet, dass es existieren muss. Dieses Argument kann weggelassen werden, wenn Sie kein Unterverzeichnis benötigen.
Installationsdateien festlegen
Als nächstes müssen die Dateien festgelegt werden, die installiert werden sollen. Das erfordert die Verwendung der Funktionen addDirectory()
und addFile()
. Die addDirectory()
Funktion teilt dem Instller mit, dass ein Verzeichnis aus dem XPI Archiv (und alle Inhalte darin) in ein bestimmtes Verzeichnis installiert werden soll. Die Funktion addFile()
ist ähnlich, aber für eine einzelne Datei.
Beide Funktionen addDirectory()
und addFile()
haben unterschiedliche Formen. Die einfachste Form nimmt nur ein Argument: Das Verzeichnis, welches von der Installation erstellt werden soll.
addDirectory ( dir ); addFile ( dir ); Beispiel: addDirectory("findfile");
Das obige Beispiel legt ein Verzeichnis "findfile" für die Installation fest. Diese Funktionen können mehrmals aufgerufen werden, um mehrere Verzeichnisse und Dateien zu installieren.
Als nächstes wollen wir die Dateien im Chrome System registrieren, sodass diese mit einer Chrome-URL verwendet werden können. Das kann mit der registerChrome()
Funktion erledigt werden. Die Funktion nimmt zwei Argumente an, als erstes den Chrome-Typ, der registriert werden soll (content, skin oder locale). Ein zweites Argument ist das Verzeichnis, welches die contents.rdf Datei enthält. Weil der Dateisuche-Dialog content, eine Skin-Datei und eine locale-Datei enthält, muss registerChrome()
dreimal aufgerufen werden.
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"));
DELAYED_CHROME wird verwendet, um anzuzeigen, dass es beim nächsten Mozilla-Start installiert werden soll.
Abschluss der Installation
Die addDirectory()
und addFile()
Funktions kopieren keine Dateien. Sie geben nur an, welche Dateien installiert werden sollen. Ebenfalls gibt registerChrome()
nur an, dass diese im chrome-System registriert werden sollen. Um den Prozess zu vervollständigen und Dateien zu kopieren, muss die performInstall()
Funktion aufgerufen werden. Diese Funktionen erwartet keine Argumente.
Das finale Skript zur Installation der "Dateisuche"-Komponente ist unten aufgeführt:
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();
Als nächstes schauen wir uns zusätzliche Installationsfunktionen an.