C# System.Runtime.InteropServices.COMException(0x80080005)

C# System.Runtime.InteropServices.COMException(0x80080005),c#,.net,com,powerpoint,office-automation,C#,.net,Com,Powerpoint,Office Automation,我得到一个错误: System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索CLSID为{91493441-5A91-11CF-8700-00AA0060263B}的组件的COM类工厂失败:80080005 对于行PowerPoint.Application PowerPoint\u App=new PowerPoint.Application() 对于此处的这段代码: using (new Impersonator(Ins

我得到一个错误:

System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索CLSID为{91493441-5A91-11CF-8700-00AA0060263B}的组件的COM类工厂失败:80080005

对于行
PowerPoint.Application PowerPoint\u 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);
    }
}
使用(新的模拟程序(Installs.Current.PPTUser,null,Installs.Current.PPTPassword))
{
PowerPoint.Application PowerPoint_App=新的PowerPoint.Application();
PowerPoint.Presentation=null;
尝试
{
PowerPoint_App.Visible=MsoTriState.msoTrue;
演示文稿=PowerPoint\u App.Presentations.Open(
strPptFilePath,Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoTrue);
对于(int i=0;i
每当我第一次运行代码时,它都能完美地工作,但随后它为PowerPoint创建了一个流程(可以在任务管理器中看到)。我使用了
PowerPoint_App.Quit()
退出已经打开的进程,但它不工作并引发错误。我转到任务管理器并从那里结束流程,然后它就可以再次工作了

从代码中退出流程时我是否做错了什么,或者有其他方法吗?

请参阅

还有一个选项,让应用程序检查exe是否正在运行,尝试在final中手动终止它,但我强烈建议不要这样做。

请参阅


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

好吧,就是这样。我参考了所有可能的解决方案。从杀死,退出,关闭,封送。最终删除对象,GC收集和等待结束。但对我来说什么都不管用。因此,我发现了正在运行的进程,并通过代码将其终止。一切都按我预期的方式进行

代码:

  Process[] pros = Process.GetProcesses();
    for (int i = 0; i < pros.Count(); i++)
         {
           if (pros[i].ProcessName.ToLower().Contains("powerpnt"))
                {
                  pros[i].Kill();
                }
         }
Process[]pros=Process.getprocesss();
for(int i=0;i
需要名称空间:

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

好吧,事情就是这样发展的。我参考了所有可能的解决方案。从杀死,退出,关闭,封送。最终删除对象,GC收集和等待结束。但对我来说什么都不管用。因此,我发现了正在运行的进程,并通过代码将其终止。一切都按我预期的方式进行

代码:

  Process[] pros = Process.GetProcesses();
    for (int i = 0; i < pros.Count(); i++)
         {
           if (pros[i].ProcessName.ToLower().Contains("powerpnt"))
                {
                  pros[i].Kill();
                }
         }
Process[]pros=Process.getprocesss();
for(int i=0;i
需要名称空间:

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

powerpoint UI是否同时显示错误?如果压力过大,Powerpoint COM服务器很容易失败(例如在循环中)。我没有打开ppt ui。我使用的是ppt幻灯片中的图像和文本对象。它们在编辑器中进一步使用。Powerpoint ui是否同时显示错误?如果压力过大(例如在循环中),Powerpoint COM服务器很容易出现故障。我没有打开ppt ui。我使用的是ppt幻灯片中的图像和文本对象。它们将在编辑器中进一步使用。。