如何处理 System.Runtime.InteropServices.COMException (0x800706BA): RPC 服务器不可用。 (HRESULT 异常:0x800706BA)
How to handle System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
我正在开发一个 Windows 应用程序,我可以在其中操作 Word 应用程序。更具体地说,我正在打开一个 Word 文档,但是当我退出它并尝试打开另一个 Word 文档时出现此错误。
如何处理
System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) at Microsoft.Office,Word.ApplicationClass.set_Visible(Boolean Prop)**
如果我不退出 Word 应用程序,则不会出现此错误。
下面我给大家展示一下我打开和退出Word应用程序的功能
//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());
}
异常很可能是由以下代码行引发的:
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());
}
我终于弄明白是什么问题了。
主要问题是当我退出它并尝试打开另一个 Word 文档时,打开另一个 Word 文档意味着 get/create 一个 Word 应用程序对象。在我的案例 wordApp != null
中,在完成应用程序之后,我必须创建另一个 Word 应用程序对象 和 return 用于此案例。
//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()保持不变。
我正在开发一个 Windows 应用程序,我可以在其中操作 Word 应用程序。更具体地说,我正在打开一个 Word 文档,但是当我退出它并尝试打开另一个 Word 文档时出现此错误。
如何处理
System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) at Microsoft.Office,Word.ApplicationClass.set_Visible(Boolean Prop)**
如果我不退出 Word 应用程序,则不会出现此错误。
下面我给大家展示一下我打开和退出Word应用程序的功能
//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());
}
异常很可能是由以下代码行引发的:
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());
}
我终于弄明白是什么问题了。
主要问题是当我退出它并尝试打开另一个 Word 文档时,打开另一个 Word 文档意味着 get/create 一个 Word 应用程序对象。在我的案例 wordApp != null
中,在完成应用程序之后,我必须创建另一个 Word 应用程序对象 和 return 用于此案例。
//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()保持不变。