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-ID: 151461

Url: https://administrator.de/forum/word-unter-vb-net-dienst-fernsteuern-151461.html

Ausgedruckt am: 22.12.2024 um 16:12 Uhr

SlainteMhath
SlainteMhath 21.09.2010 um 15:52:21 Uhr
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
ChrFriedel
ChrFriedel 21.09.2010 um 16:06:22 Uhr
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.
ChrFriedel
ChrFriedel 23.09.2010 um 14:08:21 Uhr
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
ChrFriedel
ChrFriedel 19.01.2012 um 15:51:15 Uhr
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.