如何解决消息过滤器指示应用程序正忙。 (来自HRESULT的异常:0x8001010A(RPC_E_SERVERCALL_RETRYLATER))

时间:2014-02-24 12:41:11

标签: c# asp.net ms-office office-interop

PowerPoint.Application PowerPoint_App;
PowerPoint_App = new PowerPoint.ApplicationClass();
PowerPoint_App.DisplayAlerts = PowerPoint.PpAlertLevel.ppAlertsNone;
PowerPoint.Presentation presentation;
presentation = null;
try
{
    PowerPoint_App.Visible = MsoTriState.msoTrue;
    presentation = PowerPoint_App.Presentations.Open(strPptFilePath, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
    PowerPoint.Slide tempSlide = null;
    int totalSlides = presentation.Slides.Count;
    int slideNo = 0;

我在PowerPoint_App.Presentations.Open代码上收到以下异常。

  

异常消息:消息过滤器指示应用程序正忙。 (来自HRESULT的异常:0x8001010A(RPC_E_SERVERCALL_RETRYLATER))

我之前在这段代码中没有收到此错误。以前一切都很完美。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:2)

我最终删除了:

 PowerPoint_App.Visible = MsoTriState.msoTrue;

它有效...... !!!

答案 1 :(得分:0)

我正在解决一个类似的问题(通过PowerShell控制Excel),并想补充一点-以一种我无法开始解释的方式-@Milind Anantwar的建议的类似之处导致我的脚本开始工作。 / p>

更多详细信息(如果有帮助的话):

  • 就我而言,在本地运行时一切正常。我开始看到

      

    应用程序忙

    仅当我转为通过Azure Hybrid Worker Runner执行时例外。

  • 参考以下代码段,我在第2行之后看到了异常,但是删除了第2行则“解决了”问题:

    $excel = New-Object -ComObject Excel.Application    
    $excel.visible = $SHOW_EXCEL    
    $workbook = $excel.Workbooks.Open($_excel_file) 
    
  • $SHOW_EXCEL设置为$false时,我看到了异常。

答案 2 :(得分:0)

检查您的任务管理器;您可能有一个来自调试会话的孤立的应用程序实例。杀死它,然后重试。以前我就是这种情况。

答案 3 :(得分:0)

我只想说Nikolay's的建议对我来说是100%正确的位置。尽管我的问题是与Excel而非PowerPoint交互的代码,但我相信它将同样适用。

突然好象已经无处不在的服务运行了好几年没有问题的服务开始遇到此错误。同样,最近也没有任何可怀疑的代码更改。

我通过远程桌面使用运行有问题的自动化服务的服务帐户的凭据登录到服务器,并在手动启动Excel时立即看到一个弹出窗口,其中包含一些无关紧要的新闻关于。我在此单击“确定”,关闭Excel,注销,然后重新启动服务,瞧!没有其他问题。

长话短说,问题的根本原因(对我而言)是Excel试图呈现弹出窗口,并且由于没有用户确认弹出窗口而导致继续执行代码无法继续。确认后,如果您遇到与我相同的问题,问题将消失。

答案 4 :(得分:0)

对我来说,打开工作簿后,我不得不等待 Excel 准备就绪。下面解决了这个问题:

xlApp = new Excel.Application();
xlBook = xlApp.Workbooks.Open(workbook);

// wait for the workbook to open
while (!xlApp.Ready)
{
    Thread.Sleep(500);
}