Bei dem Versuch eine Excel/Office-Automation auf einem IIS Server via WCF durchzuführen, ist nicht ganz einfach.
Vorweg sei gesagt, dass es auf jeden Fall möglich ist!
Microsoft selbst schreibt dazu folgendes:
Die Automatisierung von Microsoft Office-Anwendungen unter Verwendung unbeaufsichtigter, nicht interaktiver Clientanwendungen oder Clientkomponenten (wie ASP, DCOM und NT-Dienste) kann von Microsoft zum jetzigen Zeitpunkt weder empfohlen noch unterstützt werden, weil Office bei einer Ausführung in einer solchen Umgebung instabil werden kann und/oder sich die Anwendungen eventuell gegenseitig sperren.
(Quellen Angabe weiter unten)
Wie ein IIS bzw. der Service Host konfiguriert werden muss, erklärt dieser Blog-Post.
Wieso funktioniert das eigentlich nicht?!
Microsoft Office nimmt beim Start eine Benutzeridentität an, das gilt auch wenn diese über eine Automation via .NET gestartet werden.
Office versucht während der Laufzeit zum Beispiel Drucker und sonstige Einstellungen zu laden, welche sich für die ausführende Benutzeridentität in der Registry befinden sollten.
Im Falle eines Anwendungspools (z.B. DefaultAppPool) sind diese Pfade in der Registry nicht vollständig vorhanden, da der Benutzer nicht für eine Anmeldung am System vorgesehen ist.
Am Ende des Artikels führt ein Link zu Microsoft Support, wo die fünf “Hauptproblembereiche” aufgeführt werden..
Anleitung
1)
– IIS-Manager öffnen
– Anwendungspools hinzufügen “OfficeAutomationWCF”
(Hier müsst auch ihr das benötigte Framework auswählen)
– Nach dem Anlegen in die Erweiterten Einstellungen dieses neuen Anwendungspools
> Benutzerprofil laden: True
> Identität: NetworkService
– In den Erweiterte Einstellungen der Site bzw. der eigenen Anwendung den soeben erstellten Anwendungspool auswählen.
2)
Im Explorer zu folgendem Pfad navigieren:
C:\Windows\SysWOW64\config\systemprofile (bzw. bei x86 in C:\Windows\config\systemprofile)
Dort legen wir einen neuen Ordner namens “Desktop” an.
3)
– Verwaltung (nicht Computerverwaltung) öffnen und in die Komponentendienste wechseln.
– Im linken Tree Rechtsklick auf Arbeitsplatz (Komponentendienste -> Computer -> Arbeitsplatz) und Eigenschaften.
– Unter dem Reiter COM-Sicherheit auf Standard bearbeiten (Zugriffsberechtigungen)
– Hinzufügen: Jeder, Netzwerkdienst, Host\Benutzer In meinem Fall habe ich hier vollen Zugriff (Remote/Lokal) vergeben
– Unter dem Reiter COM-Sicherheit auf Standard bearbeiten (Start- und Aktivierungsberechtigungen)
– Hinzufügen: Jeder, Netzwerkdienst, Host\Benutzer In meinem Fall habe ich hier vollen Zugriff (Remotestart/Lokalstart bzw. Remoteaktivierung/Lokalaktivierung) vergeben
Da diese Einstellung Sicherheitsrelevante Konsequenzen nach sich ziehen, muss jeder selbst entscheiden ob ihm das Wert ist 😉
Nun müsste die Office Automation theoretisch funktionieren, hier noch ein paar Hinweise:
– Zugriffsberechtigungen auf den Workapth der Anwendung muss gewährleistet sein (ggfs. nicht Laufwerk C:\ verwenden)
– Wenn die Anwendung gestartet wird, sollte Excel/Word/etc im Taskmanager als Netzwerkdienst ausgeführt werden
– Unbedingt beachten, dass sich innerhalb von Office kein modales Fenster öffnet, da dieses nicht auf dem Desktop gesehen werden kann
Ein sehr interessanter Artikel von Microsoft ist übrigens hier zu finden:
http://support.microsoft.com/kb/257757
0 Comments