如何处理system.runtime.interopservices.comexception(0x800706BA):



我正在开发一个我操纵Word应用程序的Windows应用程序。更具体地说,我正在打开一个Word文档,但是当我退出并尝试打开另一个Word文档时,此错误会出来。

如何处理

system.runtime.interopservices.comexception(0x800706BA(:RPC服务器不可用。(Hresult的例外:0x800706BA(在Microsoft.Office,word.applicationclass.set_visible(boolean prop(**

如果我不退出单词应用程序,则不会出现此错误。

下面我向您展示了我打开并退出单词应用程序的功能。

    //function to open word Document located in a specific path
        public static void openWordDocument(string fileName)
        {
            try
            {
                wordApplication.Visible = true;
                string filePath = myPath + fileName;
                WordApi.Document docx = wordApplication.Documents.Open(filePath);
            }
            catch (Exception ex)
            {
                MyLogger.Error(ex.ToString());
            }
        }

//function to quit wordApplication 
  public static void CloseWordApp() {
            try {
                Object wordAppObject = Marshal.GetActiveObject("Word.Application");
                WordApi.Application wordApp = (WordApi.Application)wordAppObject;  //cast Object to its actual type
                wordApp.Quit();
            }
            catch (Exception ex) {
                 MyLogger.Error(ex.ToString());
            }

我终于弄清楚了什么问题。主要问题是,当我退出它并尝试打开另一个Word文档时,打开另一个Word文档意味着获取/创建Word应用程序的对象。在我的情况下,wordApp != null,在完成应用程序后,因此我必须创建另一个 Word Application Object 并将其返回。

  //open word Document located in a specific path
    public static void openWordDocument(string fileName)
    {
        try
        {
            wordApplication = createWordApplicationObject(wordApplication);
            wordApplication.Visible = true;
            string filePath = myPath + fileName;
            WordApi.Document docx = wordApplication.Documents.Open(filePath);
        }
        catch (Exception ex)
        {
            MyLogger.Error(ex.ToString());
        }
    }
private static WordApi.Application createWordApplicationObject(WordApi.Application wordApp)
    {
        WordApi.Application wordAppFirstTime;
        WordApi.Application wordApp1;
        if (wordApp == null)
        {
            wordAppFirstTime = new WordApi.Application();
            return wordAppFirstTime;
        }
        else
        {
            wordApp1 = new WordApi.Application();
            return wordApp1;
        }
    }

使用 closewordapp((保持不变。

很可能是由以下代码发射的例外:

wordApplication.Visible = true;

您需要确保COM服务器还活着。因为退出后不可用。我建议将这种对象引用设置为NULL,因此以后我们可以检查应用程序对象是否还活着。例如:

try
{
    if (wordApplication == null)
    {
        wordApplication = new Word.Application();
    }
    wordApplication.Visible = true;
    string filePath = myPath + fileName;
    WordApi.Document docx = wordApplication.Documents.Open(filePath);
}
catch (Exception ex)
{
    MyLogger.Error(ex.ToString());
}

我想添加一个对我有用的解决方案。我们在.NET Web服务中遇到了这个问题,以及其他错误,例如"远程过程呼叫失败"。在word.documents.open((上。我将列出我们尝试过的所有内容,并使用解决方案完成。我们尝试了:

  • 确保RPC服务已启动。单词没有损坏,打开正确,包括我们打开的文件。
  • 重新启动服务器和托管Web应用程序的服务。
  • 回滚窗口更新,该更新在停止工作的同一天发生。
  • 卸载了防病毒软件。
  • 我们将代码隔离到第三方应用程序以验证它是Open((引起问题并使用不同文件的方法。我们创建了一个胜利表应用程序和Consol应用程序。我们运行了那个小应用程序作为胜利管理员,一个常规帐户以及运行网络的帐户应用。
  • 我们运行了Procmon。
  • 我们对单词进行了维修。
  • 我们在整个办公室安装了办公室,我们尝试了32和64bits版本

结局解决方案:我们删除了运行Web应用程序的用户配置文件。

4天以找到这一点。我以为我会和世界分享我的痛苦。大声笑

发布这些行时,我们不确定为什么本地配置文件创建此问题。

相关内容

最新更新