chrfriedel
Goto Top

Word unter vb.net Dienst fernsteuern

Hallo liebe Administratoren,

also ich bin aktuell dabei einen Windows-Dienst zu programmieren der diverse Worddokumente bearbeiten soll. Allerdings bin ich dabei auf ein mir unerklärliches Problem gestossen:

Hier erstmal ein Codeausschnitt:

Dim Word as new Microsoft.Office.Interop.Word.Application
word.documents.open(FileString)
msgbox(word.documents.count)  'Anzeige der in Word geöffneten Dokumente  

'Änderungen  

word.activeDocument.Save()

Dieser Code funktioniert einwandfrei wenn ich ihn in einer Windows-Forms Anwendung ausführe. Der selbe Code aber als Windows-Dienst funktioniert nicht. Das Problem ist das öffnen des Dokumentes. Die Zeile zum Öffnen des Dokuments wird zwar ohne Exception ausgeführt aber die Ausgabe word.documents.count zeigt 0 (Keine Exception also antwortet das Wordobject wie vorgesehen) wohingegen in einer Forms-Anwendung die erwartete 1 angezeigt wird. Alle Versuche auf Word.ActiveDocument zuzugreifen lösen eine Exception aus (Der Befehl ist nicht verfügbar weil kein Dokument geöffnet ist).

Mein Frage ist nun wieso Word aus dem Dienst zwar erfolgreich gestartet wird aber dann seinerseits kein Dokument öffnet.
Wenn ich es mit der Zeile

Dim Doc = word.documents.open(FileString)

versuche wird diese zwar korrekt ausgeführt aber danach ist Doc trotzdem nicht referenziert.

Der Dienst lief schon unter verschiedenen Konten. Aktuell sogar unter dem Administrator. Auch habe ich mit diesem Konto bereits Word gestartet und die diversen Fenster beim Erststart geschlossen so das Word sich daran nicht stören sollte.
Weiterhin ist mir aufgefallen das Word laut Taskmanager läuft und sogar ziemlich viele Ressourcen benötigt. Leider bekomme ich es auch nicht hin Word sichtbar zu machen um zu sehen ob es etwas tut... Word.visible= true bringt in einem Dienst nicht den gewünschten Erfolg. Auch in diese Richtung wäre ich für einen Tipp dankbar.

Das Betriebssystem ist Windows Server 2008 (nicht R2), das verwendete Office 2007 und kompilliert wird mittels Visual Studio 2010 fürs .Net Framework 2.0

Wer hat eventuell eine Idee was ich noch versuchen könnte um Word mittels VB.Net Dienst fernzusteuern?

Bin für jeden Gedanken dankbar!

Viele Grüße

Content-Key: 151461

Url: https://administrator.de/contentid/151461

Printed on: April 26, 2024 at 12:04 o'clock

Member: SlainteMhath
SlainteMhath Sep 21, 2010 at 13:52:21 (UTC)
Goto Top
Moin,

grundsätzlich können Dienste ab Vista nicht mehr direkt mit dem Desktop interagieren (also auch keine Fenster usw öffnen). Nennt sich "Session 0 isolation" => http://www.microsoft.com/whdc/system/sysinternals/Session0Changes.mspx

Evtl. lliegt hier dein Problem.

lg,
Slainte
Member: ChrFriedel
ChrFriedel Sep 21, 2010 at 14:06:22 (UTC)
Goto Top
Vielen Dank erstmal für den Tipp. Das war mir neu.
Aber das es mit dem Problem zu tun hat glaube ich (noch) nicht, da ich aus dem gleichen Dienst heraus auch eine andere Anwendung per API fernsteuere die ebenfalls Dokumente öffnet und verändert. Ich gehe deswegen mal davon aus das das auch mit Word funktionieren sollte. Aber die Session-Thematik schaue ich mir auf jeden Fall an.

Auch für eine Workaround-Idee wäre ich offen.
Member: ChrFriedel
ChrFriedel Sep 23, 2010 at 12:08:21 (UTC)
Goto Top
Also das Thema würde ich als gelöst bezeichnen auch wenn die Lösung schlicht und ergreifend nur ist das es nicht funktioniert. Für alle suchenden habe ich einem anderen Forum noch den Tipp zu "Aspose Word" oder "TX Text Control" als kostenpflichtige Komponenten für .Net erhalten. Vielleicht nützt das jemandem etwas.

Grüße
Member: ChrFriedel
ChrFriedel Jan 19, 2012 at 14:51:15 (UTC)
Goto Top
Das Mitglied Avantis hat mir zu diesem Thread noch eine alternative Lösung gesendet die vielleicht einigen helfen könnte:


Solution

32-bit systems:

1) browse to the folder: C:\Windows\System32\config\systemprofile

2) create a new folder and name it "Desktop".

3) you're done.


64-bit systems:

1) Do what I described for 32-bit systems.

2) browse to the folder: C:\Windows\SysWOW64\config\systemprofile

3) create a new folder and name it "Desktop".

4) you are done.