Unter Windows geschehen manchmal die skurrilsten Dinge. So stieß ich auf einen beim Entwickeln eines PDF-Konverters. Meine Aufgabe bestand darin einen Web-Services zu entwickeln, der aus Word-Dokumenten PDF-Dokumente generiert. Der Web-Service wurde innerhalb eines IIS auf einem Windows Server bereitgestellt. Um die PDF-Dokumente zu erstellen, greift der existierende Konverter auf eine installierte Instanz von Office bzw. auf das COM-Objekt von Word zu.
Beim Entwicklen gab es keinerlei Probleme. Alles lief wunderbar bis ich den fertigen Web-Services auf den IIS deployed habe. Plötzlich mussten eine Reihe von Fehlern bezwungen werden. Als erstes bekam ich diese Fehlermeldung:
Fehler 1
System.UnauthorizedAccessException: Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 Zugriff verweigert (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
Hmm… Zugriff verweigert. Ok, dann geben wir dem Web-Service auf dem IIS aus Testzwecken erstmal volle Berechtigungen, indem der Anwendungspool auf die Indentität „LocalSystem“ gestellt wird. Die Fehlermeldung verschwand und eine weitere Fehlermeldung tauchte auf.
Fehler 2
System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80080005 Starten des Servers fehlgeschlagen (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
Dieser Fehler hat mich einige Nerven und viel Zeit gekostet. Er taucht nur auf Serverbetriebsystemen auf, weil der Ordner Desktop im Verzeichnis C:\Windows\SysWOW64\config\systemprofile fehlt. Wird dieser Ordner erstellt, funktioniert die Anwendung einwandfrei. Auf einem 32-Bit System muss der Ordner Desktop im Verzeichnis C:\Windows\System32\config\systemprofile erstellt werden.
Also wurde je ein Ordner Desktop in den folgenden Verzeichnissen erstellt:
C:\Windows\SysWOW64\config\systemprofile\Desktop C:\Windows\System32\config\systemprofile\Desktop
Berechtigungen anpassen
Um das Deployment abzurunden müssen noch die Berechtigungen angepasst werden. Am besten erstellt man einen neuen User (hier WordUser), mit dessen Rechten der Web-Service ausgeführt wird. Dieser bekommt Berechtigungen in den folgenden Verzeichnissen:
C:\Windows\SysWOW64\config\systemprofile C:\Windows\System32\config\systemprofile
Des Weiteren benötigt der User WordUser auch die Berechtigung, um die Office-DLLs nutzen zu dürfen. Diese Berechtigung stellt man wie folgt ein:
- Ausführen (Windows + R): DCOMCNFG
- Rechtsklick auf Konsolenstamm->Komponentendienste->Computer->Arbeitsplatz, dann auf Eigenschaften
- Auf den Reiter COM-Sicherheit wechseln
- Start- und Aktivierungsberechtigungen->Standard bearbeiten…
- WordUser hinzufügen mit den Rechten: Lokaler Start, Lokale Anmeldung
Nachdem all‘ diese Anpassungen gemacht wurden, funktioniert der PDF-Konverter als Web-Service auf einem IIS auf einem Serverbetriebsystem wunderbar.
Das Titelbild wurde aus zwei anderen Bildern erstellt und steht und der CC-BY-SA 3.0-Lizenz (http://creativecommons.org/licenses/by-sa/3.0). Das Word-Logo stammt von Microsoft [Public domain], via Wikimedia Commons. Das PDF Logo stammt von Mimooh (Own work) [CC BY-SA 3.0], via Wikimedia Commons.