ADPREP "multi-language" ;-)

Servus, Fabian am Bildschirm. Neulich habe ich mit einem Kunden an einem Problem gearbeitet, welches ich hier nicht vorenthalten will. Da es sich um eine sehr spezielle und wahrscheinlich seltene Konstellation handelt, wird wohl eher kein KB-Artikel dazu erscheinen ;-) : 

Ein Kunde von uns hatte einen ersten Windows Server 2008 installiert, der Member-Server in einer Windows Server 2003 Active Directory Testumgebung war. Um ein geplantes Schema-Update für den Produktions-Forest zu testen, war der Test-Forest ähnlich dem Produktions-Forest eingerichtet, inklusive des Schemas bzw. der vorhandenen Schema-Erweiterungen.

Es sollte nun mittels ADPREP der Test-Forest von Windows Server 2003 R2 Schema-Version 31 auf Schema-Version 44, also Windows Server 2008, angehoben werden. Also: DVD herausgesucht, ADPREP /FORESTPREP aufgerufen und auf Rückmeldung gewartet. Und gewartet... Und gewartet...

Aber es passierte nichts - die CMD blieb schwarz. Das Schema wurde natürlich auch "im Hintergrund" nicht erweitert, das leere Fenster ließ sich nur über die Tastenkombination <CTRL> + <C> dazu bewegen, wieder einen Command Prompt anzuzeigen.

Nach einiger Zeit des Testens kamen wir dann eigentlich nebenbei darauf, daß der installierte Server ein mit englischer MUI installierter Server war, die verwendete DVD jedoch eine deutsche. Ok dachte ich, das dürfte doch nun wirklich nicht das Problem sein, schließlich ist das ab Windows Vista bzw. Windows Server 2008 kein Thema mehr. Aber gut, lieber noch einmal getestet, bevor man lange nach einem Problem sucht, welches so nah liegt.

Ich schickte also das ADPREP-Verzeichnis einer englischen Installations-DVD vom Windows Server 2008 per E-Mail an unseren Kunden und er testete dieses ADPREP - und siehe da, es funktionierte. ADPREP lieferte den gewünschten Bildschirm mit den wichtigen Hinweisen, was während des ADPREPs passiert. Nach dem Bestätigen der Hinweise wurde das Schema-Update problemlos durchgeführt.

Nun gut, also lag es wohl doch an der unterschiedlichen Sprache - nur warum?

Wir zogen dann mittels Process Monitor einen Trace des Starts von ADPREP und konnten folgende Zugriffe filtern (Fettschrift manuell eingefügt):

10806 13:35:53,8176748 adprep.exe 3300 IRP_MJ_CREATE D:\adprep\en-US\adprep.exe.mui PATH NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a
10807 13:35:53,8178237 adprep.exe 3300 IRP_MJ_CREATE D:\adprep\en\adprep.exe.mui PATH NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a

10808 13:35:53,8180276 adprep.exe 3300 IRP_MJ_CREATE D:\adprep\adprep.exe.mui NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a

Aha! ADPREP nutzt die Datei "adprep.exe.mui", um die Textausgaben während der Ausführung zu generieren. In dieser Datei sind also die Texte gespeichert, die zur Ausführung des Programms notwendig sind bzw. zur Kommunikation mit dem Administrator davor. Diese Datei liegt standardmäßig im ADPREP Locale-Verzeichnis (z.B. en-US, de-DE, fr-FR) der Installations-DVD, etwa "%DVD_DRIVE%\SOURCES\ADPREP\en-US\adprep.exe.mui".

Während der Ausführung liest ADPREP das Locale des Servers aus, auf dem es läuft. Es versucht dann, den Locale-Pfad auf der DVD zu finden (oder natürlich beispielsweise den lokalen Pfad, wenn das Verzeichnis vorher lokal auf das System kopiert wurde). Ist der Server also, wie in unserem Fall, ein en-US System bzw. mit diesem Locale installiert, wird die Datei "adprep.exe.mui" im Unterverzeichnis "en-US" des Installationsverzeichnisses von ADPREP gesucht werden. Auf der deutschen Installations-DVD ist die Datei jedoch unter dem Verzeichnis "de-DE" gespeichert. Da liegt das Problem.

Wie man im oben gezeigten Procmon Trace sehen kann, wird die Datei automatisch an drei Orten gesucht:

  1. D:\adprep\en-US\adprep.exe.mui
  2. D:\adprep\en\adprep.exe.mui
  3. D:\adprep\adprep.exe.mui

Da die Datei jedoch in allen drei Verzeichnissen nicht gefunden werden konnte, gab ADPREP keinerlei Meldungen auf dem Schirm aus und die CMD blieb "leer".

"Verantwortlich" für dieses Verhalten ist der Universal Installer, den ADPREP zum Einlesen der benötigten Daten (so auch der Sprachdatei) nutzt.

Mögliche Lösungen für dieses Problem können also sein:

  1. Man kann das Sprachverzeichnis umbenennen, in unserem Beispiel einfach von "de-DE" in "en-US".
  2. Es wäre auch möglich, die "adprep.exe.mui" in das gleiche Verzeichnis zu kopieren, in der die Datei "adprep.exe" liegt.
  3. Der letzte und empfohlene Punkt ist, schlichtweg eine Installations-DVD der selben Sprache, wie die Installationsprache des Windows Server 2008 Systems es ist, zu verwenden. ;-)

Bis dann, Fabian.