簡體   English   中英

當單詞已經啟動時,如何在沒有加載項的情況下啟動新單詞實例

[英]How to start new word instance without add-ins when word is already started

我正在使用Word(從2007年到2013年)將文檔轉換為PDFA格式,但是遇到具有某些加載項的用戶時遇到了麻煩。 當他們使用系統時,會得到各種COM異常,例如RPC_E_SERVERCALL_RETRYLATER和(0x800706BA)RPC服務器不可用。

如果他們禁用外接程序,則可以正常工作。 問題是需要外接程序,這樣簡單的解決方案便無法實現。 (我也知道,用單詞來表達這種東西是不被接受的,我們正在尋求更好的東西,但是直到業務方面想付錢之前,我們都被這個問題困住了。)

新計划是使用/ a參數開頭word,以使其在沒有加載項的情況下開始。

我看到了另一個問題, 如何在沒有外接程序的情況下從.NET啟動MS Office Word? 如果有一個Word實例的可行解決方案,

 //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");

我的問題有兩點:啟動這樣的單詞時是否可以設置啟動參數

var _word = new Word.Application();

因此,我不必使用Process.start();。

如果不是,我該如何后期綁定到特定的單詞實例(GetActiveObject(),始終獲取最早的單詞實例),也許還有其他方法?

對於第一個問題,沒有辦法傳遞參數或以其他方式影響使用new關鍵字時Word的啟動方式。 啟動應用程序的說明位於注冊表中,因此它將涉及更改在注冊表中實現new關鍵字的方式。 並且由於此注冊表項還確定Windows資源管理器如何啟動Word.Application,因此更改注冊表項也將更改Word為用戶工作的方式。

通過Application.COMAddins屬性啟動Word實例后,可以卸載加載項。 這等效於在Word UI中取消選中“ COM加載項”對話框中“加載項”旁邊的框。 我將測試在UI中執行此操作是否允許您的軟件正常工作。

如果是這樣,您可以將其合並到您的代碼中-無需擔心在沒有加載項的情況下啟動Word。

這就GetActiveObject了第二個問題: GetActiveObject僅能訪問在ROT中注冊的Word(任何Office應用程序)的單個實例。 根據設計,Office應用程序僅在ROT中注冊一個實例,通常,這將是第一個實例。 MSDN上有一些知識庫文章對此進行了描述。 唯一的解決方法是在用戶配置文件中啟動Word的兩個實例,“隱藏”第一個(已注冊的)實例,然后將第二個實例呈現給用戶。

但這可能很棘手,因此,如果可行,我會建議使用COMAddins集合來卸載有問題的加載項。

(我目前在移動設備上。下次,在我的主機上,我將嘗試記住粘貼指向ROT上KB文章的鏈接。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM