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();
退出已经打开的进程,但它不工作,并抛出我的错误。我转到任务管理器,从那里结束进程,然后它就可以再工作一次了。
我做错了什么,而退出过程从代码或有任何其他方法来做到这一点?
好吧,就是这样。我参考了所有可能的解决方案。从杀人,退出,结束,元帅。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是否正在运行,尝试在最后手动杀死它,但我强烈建议不要这样做。