Das Öffnen eines Microsoft Word-Dokuments in einem Windows-Dienst scheint zu hängen

8

Ich habe einen Windows-Dienst in c # geschrieben, der den Text aus den Word-Dokumenten (doc und docx) mit VBA Interop liest. Bei bestimmten Dokumenten scheint es jedoch beim Aufruf der Open-Methode zu bleiben. Es scheint, dass die Problemdokumente alle Makros enthalten. Die lokal installierte Version von Word hat Makros deaktiviert und der Code, den ich zum Öffnen des Dokuments verwende, ist wie folgt:

%Vor%

Ich kann diese Dokumente manuell auf meinem Entwicklungscomputer bearbeiten. Weiß jemand, warum das passiert oder haben Sie weitere Fragen zu meiner Frage?

    
Keith K 04.08.2010, 15:27
quelle

5 Antworten

4

Ich habe hoffentlich endlich alle diesbezüglichen Probleme gefunden und bin mit der folgenden Zeile zum Öffnen des Dokuments gekommen:

%Vor%

Die Parameter 4th und 2nd late verhindern, dass Reparatur- und Kodierdialoge geöffnet werden, wodurch die meisten Fehler behoben wurden.

Der Registrierungsschlüssel zum Deaktivieren von Makros ohne Benachrichtigung lautet:

%Vor%

Schließlich gab es nach all dem noch Dokumente, die den Service und die undichten Winword-Instanzen zum Absturz brachten. Nachdem ich mich als Dienstbenutzer angemeldet und eines dieser Dokumente geöffnet habe, habe ich diesen Nachrichtendialog von Word erhalten: "Word kann den Konverter mswrd632 nicht starten". Dies wird behoben, indem ein Registrierungsschlüssel wie in Ссылка erläutert entfernt wird.

Bearbeiten: Ich habe auch festgestellt, dass, weil VBA nicht installiert wurde, Word einen Dialog geöffnet hat, um dem Dienst mitzuteilen, dass einige der Dokumente den Dienst hängen ließen. Erneutes Installieren und dann deaktivieren, obwohl Word selbst (wie oben erklärt) ein paar mehr Dokumente verarbeitet. Noch ein paar Dokumente, die nicht verarbeitet werden können. Ich denke daran, Ссылка mit ikvmc zu versuchen, stattdessen die Dokumente zu analysieren.

    
Keith K 06.09.2010, 13:45
quelle
5

Microsoft.Office.Interop.Word verwendet einen COM-Wrapper, um die ausführbare Word-Datei fernzusteuern. Es ist absolut verständlich. Die Einstellung zum Deaktivieren von Makros in der von Ihnen verwendeten Word-Kopie ist mit hoher Wahrscheinlichkeit eine benutzerspezifische Einstellung und der Windows-Dienst wird Word als das Benutzerkonto ausführen, unter dem der Dienst ausgeführt wird. Die Wahrscheinlichkeit ist, dass es in irgendeiner theoretischen Unterwelt, die die Windows-Dienstbenutzer desktop / ui ist, im Grunde eine Art Makrosicherheitsdialog auftaucht.

    
Ben Robinson 04.08.2010 16:14
quelle
2

Es gibt Empfehlungen gegen die serverseitige Automatisierung durch Microsoft, aber es gibt auch viele Ressourcen, die Ihnen helfen, wenn Sie das noch tun werden. Diese beiden Artikel sollten Ihnen genügend Hintergrundinformationen darüber geben, was Sie berücksichtigen sollten:

Wenn es jedoch so einfach ist, dass Ihre Dokumente wegen irgendwelcher AutoMacros wie AutoOpen im VBA-Code hängen bleiben, müssen Sie WordBasic verwenden, um diese zu deaktivieren. Ich könnte das nie in C # schaffen, aber ich habe es in VB.NET gemacht. Siehe So öffnen Sie ein Dokument, das AutoOpen enthält Makro mit PowerShell?

Eine letzte Option wäre die Verwendung eines Tools, das für die serverseitige Office-Automatisierung erstellt wurde, z. B. Apse.Words .

    
Todd Main 04.08.2010 16:59
quelle
2

Word wird den Benutzer auffordern, wenn ein kleines Problem mit dem Dokument auftritt. Diese Eingabeaufforderung wird auf dem Desktop für Dienste in Ihrem Fall angezeigt, wo niemand es schreien hören kann. Und verhindern, dass der Methodenaufruf Open () abgeschlossen wird.

Stellen Sie sicher, dass das OpenAndRepair-Argument der Open () -Methode auf "True" gesetzt ist, sodass dies automatisch behandelt wird, ohne den Benutzer dazu aufzufordern.

    
Hans Passant 04.08.2010 17:47
quelle
2

Sie können auch versuchen, die Methode documents.OpenNoRepairDialog (...) aufzurufen. Es existiert für Büro 2007 und später.

Beachten Sie, dass ich gerade COM-Aufrufe verwende, also bin ich mir nicht sicher, ob es in den Office-Interop-Bibliotheken existiert.

    
JMilnes 07.10.2010 22:15
quelle