2016-05-07 1 views
0

Ich verwende Word (von 2007 bis 2013) zum Konvertieren von Dokumenten in das PDFA-Format und ich habe Probleme mit Benutzern mit bestimmten Add-Ins . Wenn sie das System verwenden, erhalten sie eine Auswahl von COM-Ausnahmen wie RPC_E_SERVERCALL_RETRYLATER und (0x800706BA) RPC-Server nicht verfügbar.So starten Sie eine neue Wortinstanz ohne Add-Ins, wenn das Wort bereits gestartet wurde

Wenn sie die Add-Ins deaktivieren, funktioniert es gut. Problem ist, dass die Add-Ins benötigt werden, so dass eine einfache Lösung aus dem Fenster ist. (Auch ich weiß, dass die Verwendung von Wort für diese Art von Sache ist verpönt, und wir suchen etwas besser zu bekommen, aber bis die Business-Seite zahlen wollen, sind wir mit diesem stecken)

Der neue Plan ist zu starten Wort mit dem/a-Parameter, um es ohne Add-Ins zu starten.

ich eine andere Frage How can I start MS Office Word from .NET without Add-ins? gesehen haben, wo es eine funktionierende Lösung für eine Instanz von Word ist,

//startup without plugins 
     System.Diagnostics.Process.Start(
      @"Winword.exe", 
      @"/a"); 
     //give a time for startup 
     Thread.Sleep(2000); 
     //attach to office 
     Application officeApplication = (Application)Marshal.GetActiveObject("Word.Application"); 

Meine Frage ist zweifach: Ist es möglich, Startparameter zu setzen, wenn Sie Wort wie dieses

starten
var _word = new Word.Application(); 

Also muss ich Process.start() nicht verwenden;

Und wenn nicht, wie mache ich eine späte Bindung an eine bestimmte Wort Instanz (GetActiveObject(), immer die älteste Wort Instanz), vielleicht gibt es eine andere Methode?

Antwort

0

Zu Ihrer ersten Frage gibt es keine Möglichkeit, Parameter zu übergeben oder anderweitig zu beeinflussen, wie Word startet, wenn Sie das Schlüsselwort new verwenden. Die Anweisungen zum Starten der Anwendung befinden sich in der Registrierung. Daher muss das Schlüsselwort new in der Registrierung implementiert werden. Und da dieser Registrierungseintrag außerdem bestimmt, wie Windows Explorer die Word.Application startet, würde das Ändern des Registrierungseintrags auch die Funktionsweise von Word für den Benutzer ändern.

Es ist möglich, entladen Add-Ins, nachdem eine Instanz von Word über die Application.COMAddins Eigenschaft gestartet wurde. Dies entspricht dem Deaktivieren der Kontrollkästchen neben den Add-In-Einträgen im Dialogfeld COM-Add-Ins in der Word-Benutzeroberfläche. Ich würde testen, ob dies in der Benutzeroberfläche funktioniert, damit Ihre Software ordnungsgemäß funktioniert.

Wenn dies der Fall ist, können Sie dies in Ihren Code integrieren - Sie müssen sich keine Gedanken darüber machen, Word ohne die Add-Ins zu starten.

Das bringt uns zur zweiten Frage: GetActiveObject ist nur in der Lage, auf die einzelne Instanz von Word (jede Office-Anwendung) zuzugreifen, die im ROT registriert ist. Standardmäßig registrieren Office-Anwendungen nur eine einzige Instanz im ROT. In der Regel wird dies die erste Instanz sein. Es gibt einige KB-Artikel auf MSDN, die dies beschreiben. Die einzige Problemumgehung ist, zwei Instanzen von Word in dem Benutzerprofil zu starten, das erste (das registrierte) "auszublenden" und das zweite dem Benutzer zu präsentieren.

Aber das kann schwierig sein, also wenn es funktioniert, würde ich mit dem Vorschlag über die COMAddins Sammlung gehen, um das Problem Add-Ins zu entladen.

(Ich bin zur Zeit auf einem mobilen Gerät. Als nächstes Mal, wenn ich auf meinem Haupt-Maschine bin ich werde versuchen, in den Links zu den KB-Artikel auf dem ROT einfügen zu erinnern.)

Verwandte Themen