System.Runtime.InteropServices.COMException (0x80080005)

本文关键字:0x80080005 COMException Runtime InteropServices System | 更新日期: 2023-09-27 18:16:30

我得到错误:

System.Runtime.InteropServices。COMException (0x80080005):为CLSID为{91493441-5A91-11CF-8700-00AA0060263B}的组件检索COM类工厂失败,原因如下:

PowerPoint.Application PowerPoint_App = new PowerPoint.Application();

表示这段代码:

using (new Impersonator(Installs.Current.PPTUser, null, Installs.Current.PPTPassword))
{
    PowerPoint.Application PowerPoint_App = new PowerPoint.Application();
    PowerPoint.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.msoTrue);
        for (int i = 0; i < presentation.Slides.Count; i++)
        {
            readSlides(presentation, i);
        }
        presentation.Close();
        PowerPoint_App.Quit();
    }
    catch (Exception ex)
    {
        strSuccess = ex.ToString();
        MindMatrix.Libraries.Entities.ExceptionMessage.HandleException(ex, null);
    }
    finally
    {
        Marshal.FinalReleaseComObject(presentation);
        Marshal.FinalReleaseComObject(PowerPoint_App);
    }
}

每当我第一次运行代码时,它都可以完美地工作,但随后它为PowerPoint创建了过程(可以在任务管理器中看到)。我已经使用PowerPoint_App.Quit();退出已经打开的进程,但它不工作,并抛出我的错误。我转到任务管理器,从那里结束进程,然后它就可以再工作一次了。

我做错了什么,而退出过程从代码或有任何其他方法来做到这一点?

System.Runtime.InteropServices.COMException (0x80080005)

好吧,就是这样。我参考了所有可能的解决方案。从杀人,退出,结束,元帅。FinalReleaseComObject,GC Collect和waitforpendingfinalizer。但对我来说什么都不管用。所以我找到了正在运行的进程,并通过代码终止了它。然后一切都如我所愿。

代码:

  Process[] pros = Process.GetProcesses();
    for (int i = 0; i < pros.Count(); i++)
         {
           if (pros[i].ProcessName.ToLower().Contains("powerpnt"))
                {
                  pros[i].Kill();
                }
         }

名称空间要求:

系统。诊断

参见Application.Quit()方法无法清除进程

还有一个选项,让您的应用程序检查exe是否正在运行,尝试在最后手动杀死它,但我强烈建议不要这样做。