Mozilla/Phoenix Profile Tools für Windows

Neu: Der Starter2 auch für Firefox 1.0.

Redirector für MozillaFirebird

Mozilla Profile Redirector - Automatische Erzeugung eines Mozilla-Profils

Zusammenfassung: Ablegen des Mozilla-Profils unter Windows in einem beliebigen Verzeichnis. Scriptgesteuertes oder automatisches Anlegen und Konfigurieren des Mozilla-Profils für zahlreiche Benutzer. Dieses Tool unterstützt auch Netscape 6 und 7.

Verfahren ab Version 1.4 geändert (Bug-Report 204246)

Allgemeines

Seit einiger Zeit ist Mozilla als Nachfolger des Netscape-Internetbrowsers verfügbar. Im Gegensatz zu seinem Vorgänger wird der Ort des Profils bei den Windows-Betriebssystemen nicht mehr aus der Registry gelesen, sondern es liegt fest im Windowsprofil des angemeldeten Benutzers. Näheres dazu im Artikel "Mozilla: Gemeinsames Profil für Windows und Linux" in der c't Ausgabe 20/2002.

Für Benutzer, die an mehreren PCs im Netzwerk arbeiten ist dies ein Nachteil, denn sie müssen für jede Arbeitstation ein Profil pflegen. Auch für Umgebungen mit Roaming Users ist dies ungünstig, weil somit das Windowsprofil aufgebläht wird.

Zum Glück sind die Quellen von Mozilla einsehbar. Bei ihrem Studium entdeckt man die Funktion GetWindowsFolder. Sie ruft mit der Funktion GetSpecialPathProc die Windows-DLL shfolder.dll bzw. shell32.dll mit dem Parameter CSIDL_APPDATA auf. Als Ergebnis wird das Verzeichnis "Anwendungsdaten" aus dem lokalen Benutzerprofil von Windows zurückgeliefert. In ihm legt Mozilla ein neues Verzeichnis unter dem eigenen Namen an. Dort speichert der Browser all seine Einstellungen und seinen Cache.

Mozilla bis Version 1.3.x

Um die Quelle nicht ändern und Mozilla nicht neu übersetzen zu müssen, bietet sich folgende Lösung an: Eine kleine DLL, die Anstelle von shfolder.dll aufgerufen wird und das Mozilla-Profile-Verzeichnis aus einer Umgebungsvariablen lädt. Dies macht die kleine DLL xxfolder (Delphi-Quelle xxfolder.dpr). Wenn Mozilla ein Verzeichnis mit dem Parameter CSIDL_APPDATA anfordert, dann sucht es nach der Umgebungsvariablen MOZDIR. Falls sie gefunden wird, wird deren Inhalt zurückgegeben. Im anderen Fall, wird die originale DLL aufgerufen. Damit die DLL xxfolder.dll aufgerufen wird, muss sie in das Mozilla-BIN-Verzeichniss kopiert und der Text shfolder.dll in der Datei xpcom.dll in xxfolder gepatcht werden.

Mozilla ab Version 1.4

Um die Quelle nicht ändern und Mozilla nicht neu übersetzen zu müssen, bietet sich folgende Lösung an: Eine kleine DLL, die Anstelle von shell32.dll aufgerufen wird und das Mozilla-Profile-Verzeichnis aus einer Umgebungsvariablen lädt. Dies macht die kleine DLL xxell32 (Delphi-Quelle xxell32.dpr). Wenn Mozilla ein Verzeichnis mit dem Parameter CSIDL_APPDATA anfordert, dann sucht es nach der Umgebungsvariablen MOZDIR. Falls sie gefunden wird, wird deren Inhalt zurückgegeben. Im anderen Fall, wird die originale DLL aufgerufen. Damit die DLL xxell32.dll aufgerufen wird, muss sie in das Mozilla-BIN-Verzeichniss kopiert und der Text Shell32.dll (direkt hinter SHGetSpecialFolderPathA) in der Datei xpcom.dll in xxell32 gepatcht werden.

Achung: Shell32 unter NT 4 liefert keine Funktion SHGetSpecialFolderPathA, sondern nur die Funktion SHGetSpecialFolderLocation. xxell32 setzt diese Funktion um.

Kurzanleitung (bis Mozilla 1.3.x)

1. xxfolder.dll in das Mozilla-Verzeichnis kopieren, in dem sich die Datei xpcom.dll befindet (In C:\Programme\Gemeinsame Dateien\mozilla.org\Gre\... oder in ...\Bin).

2. In der Datei xpcom.dll den String shfolder.dll in xxfolder.dll umbenennen.

3. Mozillaverzeichnis komplett schreibschützen.

4. Im LoginScript oder anderen passenden Ort die Umgebungsvariable MOZDIR setzen (ohne das Unterverzeichnis MOZILLA, denn dies bastelt der Mozilla selbst dazu).

Kurzanleitung (ab Mozilla 1.4)

1. xxell32.dll in das Mozilla-Verzeichnis kopieren, in dem sich die Datei xpcom.dll befindet (In C:\Programme\Gemeinsame Dateien\mozilla.org\Gre\... oder in ...\Bin).

2. In der Datei xpcom.dll den String shell32.dll in xxell32.dll umbenennen. (bei den Mozilla-Versionen 1.4-1.6 ist das der dritte String, der mit einem großen S beginnt und direkt hinter SHGetSpecialFolderPathA zu finden ist.)

3. Mozillaverzeichnis komplett schreibschützen.

4. Im LoginScript oder anderen passenden Ort die Umgebungsvariable MOZDIR setzen (ohne das Unterverzeichnis MOZILLA, denn dies bastelt der Mozilla selbst dazu).

Dateien

xxfolder.dll, xxell32.dll

Angepasste Versionen von xpcom.dll:

xpcom.dll (1.0.0 RC2 dt), xpcom.dll (1.0.1 en/dt), xpcom.dll (1.1 dt), xpcom.dll (1.2.1 dt), xpcom.dll (1.3.1 dt)

xpcom.dll (1.4 dt), xpcom.dll (1.4.1 dt), xpcom.dll (1.5 dt), xpcom.dll (1.6 en/dt), xpcom.dll (1.7 dt), xpcom.dll (1.7.7 dt), xpcom.dll (1.7.8 dt), xpcom.dll (1.7.10 dt), xpcom.dll (1.7.11 dt), xpcom.dll (1.7.12 dt)

Automatisches Erzeugen des Profils

In Umgebungen mit einer großen Anzahl ständig wechselnder Benutzer, wie etwa an Universitäten oder Schulen, führen Nachfragen zu Einstellungen des Profils zu viel Betreuungsaufwand. In diesem Fall wäre es vorteilhaft, das Profil für den Benutzer fertig konfiguriert anzulegen.

Das Profil besteht aus einer größeren Anzahl von Dateien in einigen Unterverzeichnissen. Wenn Mozilla kein Profil vorfindet, dann wird ein neues angelegt.

Eine zentrale Funktion bekommt dabei die Datei Registry.dat, die in der Wurzel des Profilverzeichnises liegt. Sie ist im Binärformat und bildet eine hierarchische Struktur, wie die Windows Registry, ab. Daher vermutlich auch die Namensgleichheit. Näheres zum Aufbau dieser Datei steht in den Quellen reg.h und reg.c. Interessant ist hier nur der Schlüssel /Common/Profiles/default/directory, in dem das Verzeichnis der restlichen Profildaten steht. Mit dem MozRegD kann der Inhalt dieser Datei im Textformat exportiert werden (auch die Datei NSREG.DAT von Netscape 4).

Unter den restlichen Profildateien findet man dann die alt bekannten Dateinamen, wie Bookmarks.html und Prefs.js. Ihre Funktion ist noch die gleiche, wie unter dem Netscape-Browser Version 4.

Um nun für einen Benutzer ein Profil anzulegen, braucht man nur ein bestehendes Profil zu kopieren, die Datei Prefs.js anzupassen und den Pfad auf das Profil in die Registry.dat einzutragen, die an jenem Ort liegt, an dem sie Mozilla sucht (siehe ersten Abschnitt). Tip: Wir lassen bei uns den Teil "profile/xxxxxxxx.slt" weg: Die Datei prefs.js kopieren wir in das gleiche Verzeichnis, wie die Datei Registry.dat.

Dies macht das Programm MozInit. Zuerst wird ein Profiltemplate benötigt. Dazu wird ein frisch angelegtes Mozillaprofil unterhalb vom Verzeichnis xxxxxxxx.slt in ein zentrales Termplateverzeichnis kopiert. Dabei wird die Datei Prefs.js zusammen mit Registry.dat in ein anderes Verzeichnis kopiert, denn diese Dateien müssen beim Umkopieren angepasst werden.

Nun wird die Steuerungsdatei zu MozInit angepasst. Sie enthält die Verweise auf Quell- und Zielverzeichnisse.

Muster:

[Mozilla]
Enabled=1
ProfileDirectory=$ENV(mozdir)\mozilla  <-- hier mit \MOZILLA bzw. \PHOENIX
;oder ProfileDirectory=f:\users\$ENV(username)\mozilla
TemplateDir=mozilla.tpl\files
RegistryDatTemplate=mozilla.tpl\registry.tpl
; RegistryDatProfileName=Standard-Benutzer
Templates=mozilla.tpl\prefs.tpl,prefs.js

ProfileDirectory: Damit wird das Zielverzeichnis des zu erstellenden Profils angegeben. Dieses wird dann die Dateien Registry.dat, Prefs.js, Bookmarks.html, usw. enthalten. Achtung: Diese Angabe muss auch das Unterverzeichnis Mozilla enthalten, da dieses zwingend notwendig ist.

TemplateDir: Das Quellverzeichnis, aus dem die Ordner und Dateien (außer Prefs und die Registry) ins neue Profilverzeichnis kopiert werden. Relative Verzeichnisse beziehen sich auf das Startverzeichnis von MozInit.

RegistryDatTemplate: Quelle der Datei Registry.dat. Sie wird auch ins Profilverzeichnis kopiert.

RegistryDatProfileName: Der Name des Benutzerprofils. Wenn dieser Parameter fehlt, wird das Profile default gewählt. Den Name des Profils finden Sie in Mozilla unter Tools -> Profil wechseln.

Templates: Dateien, die variable Texte enthalten. Diese werden beim Kopieren ersetzt. Die Einträge kommen paarweise vor. Der erste ist die Quelle und der zweite das Ziel. Die Dateien sind relativ zu den entsprechenden Verzeichnissen.

Um nun variable Texte eintragen zu können, unterstützt MozInit Funktionen beim Kopieren von Templates und in der INI-Datei. Sie haben das Format $name(parameterliste). Falls ein Parameter ein oder mehrere Kommata enthält, muss er in doppelte "Anführungszeichen" gesetzt werden. Groß-Kleinschreibung wird ignoriert. Unterstützte Funktionen sind:

 
$ENV(<varname>)
$INI(<filename>,<section>,<key>[,<default>])
$REG(<key>)
$SPLIT(<target>,<start>[,>length>])
$ITEM(<target>,<number>[,>delimiters>])
$TRANSLATE(<target>,<charlist>[,<new string>])
$UPPER(<string>)
$LOWER(<string>)
$PROFILEDIR() 

$LOGINNAME() (netware only)
$FULLNAME() (netware only)
$EMAILADDR() (netware only)

$ENV() wird durch die Umgebungsvariable <varname> ersetzt. Falls sie nicht gefunden wird, bleibt der ihr Platz leer.

$INI() holt einen Text aus einer INI-Datei. Wenn sie nicht im Windows-Systemverzeichnis liegen, dann müssen sie mit Verzeichnis angegeben werden.

$REG() holt einen Text aus der Registry. Nur Felder von Typ REG_SZ, REG_EXPAND_SZ und REG_DWORD können ausgelesen werden.

$SPLIT() erzeugt einen Teiltext

$ITEM() gibt ein Wort zurück, wobei die Trennzeichen angebbar sind. Voreingestellt Trennzeichen sind " .,;".

$TRANSLATE() ersetzt in einer Zeichenkette Zeichen aus einer Liste durch keines, eines oder mehrere Zeichen ("C:\TEMP,\,\\" ergibt C:\\TEMP).

$UPPER() Wandelt Parameter mittels Windowsfunktion in Großbuchstaben um.

$LOWER() Wandelt Parameter mittels Windowsfunktion in Kleinbuchstaben um.

$PROFILEDIR() ist das Mozilla Profilverzeichnis

Parameter können wieder Funktionen enthalten oder sich aus Texten und Funktionen zusammensetzen (Bsp.: $TRANSLATE($ENV(temp),\,\\) könnte den Text "C:\\TEMP" ergeben).

Die Variante mit Novell Netware Unterstützung kennt weitere Funktionen:

$LOGINNAME() ist der Connectionname der Default-Connection (NDS und Bindery)

$FULLNAME() Ist der Wert der User-Property 'Full Name' (NDS) oder 'IDENTIFICATION' (Bindery).

$EMAILADDR() Ist der Wert der User-Property 'Internet EMail Address' (nur NDS).

Um MozInit im Bindery-Modus aufzurufen, muss die Datei MozInit.INI eine Sektion [Program] mit dem Eintrag Bindery=1 enthalten.

Dateien

MozIni (v2.1) MozIni.Exe und Muster-INI-Datei

NMozIni (v2.1) MozIni.Exe und Muster-INI-Datei mit Netware-Unterstützung. Dieses Programm benötigt den Novell Netware Client.

TemplateProfil Musterprofil von Mozilla 1.5

Der Mozilla-Starter

Um alle Benutern ein gültiges Profil zukomme zu lassen, habe ich einen Starter für Mozilla geschrieben. Er prüft zu erst, ob der Benutzer schon ein Profil hat. Wird keines gefunden, erscheint ein Fenster am Bildschirm, das fragt, ob das Profil angelegt werden soll. Der Benutzer kann bestätigen oder ablehnen: Wenn er bestätigt, wird für ihn ein Profil angelegt und Mozilla mit einer speziellen Seite gestartet - falls er ablehnt, geschieht nichts.

MzStarter.Ini:

[Path]
ProfileInit=<...>\mozinit.exe
; in diesem Verzeichnis liegt das Programm zum Anlegen des Profils
AppExec=<...>\bin\mozilla.exe
; Mozilla.exe oder MozillaFirebird.exe
TestFile=$ENV(mozdir)\mozilla\registry.dat
; Verzeichnis der Datei registry.dat des Benutzers. MozInit wird aufgerufen,
; wenn diese Datei fehlt.
FirstStartPage=http:\\<...>\mzstartup.htm
; Die Seite, die der Benutzer nach dem Anlegen des Profils das erste Mal sehen soll

Dateien

MzStarter Archiv mit MZStart.exe und MsStart.Ini

NWMzStarter Archiv mit MZStart.exe mit Netware-Unterstützung und MsStart.Ini. Dieses Programm benötigt den Novell Netware Client.

Links

Informationen zum Netscape/Mozilla-Profil

Mein Mozilla-Startbild

Mozilla im Kioskmodus laufen lassen


[HOME]

12.10.2005 Thomas Glöckler