Verwendung der Office-DLLs innerhalb eines Web-Services

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:

  1. Ausführen (Windows + R): DCOMCNFG
  2. Rechtsklick auf Konsolenstamm->Komponentendienste->Computer->Arbeitsplatz, dann auf Eigenschaften
  3. Auf den Reiter COM-Sicherheit wechseln
  4. Start- und Aktivierungsberechtigungen->Standard bearbeiten…
  5. 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.

Teilen Sie diesen Beitrag

Das könnte dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert