2013-06-03 4 views
0

Я получаю сообщение об ошибке:System.Runtime.InteropServices.COMException (0x80080005)

System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {91493441-5A91-11CF-8700-00AA0060263B} failed due to the following error: 80080005.

для линии 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(); для выхода из уже открытого процесса, но он не работает и бросает мне ошибку. Я перехожу к диспетчеру задач и заканчиваю процесс, а затем готов работать еще один раз.

Я делаю что-то неправильно, когда вы покидаете процесс из кода или есть ли другой способ сделать это?

+0

ли в Powerpoint пользовательский интерфейс с сообщением об ошибке, в то же время? Сервер Powerpoint COM может сбой довольно легко, если он сильно нагружен (например, в петле). –

+0

Я не открываю ppt ui.i использую изображения и текстовые объекты из слайдов ppt. Они также используются в редакторе. –

ответ

2

Хорошо, вот так оно и было. Я сослался на все возможное решение, которое я могу. от убийства, закрытия, закрытия, маршала. FinalReleaseComObject, GC Collect и WaitForPendingFinalizers. Но для меня ничего не работало. поэтому я узнал о запущенном процессе и убил его через код. И бам, все работает так, как я ожидал.

Код:

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

пространство имен Требуется:

System.Diagnostics

0

См Application.Quit() method failing to clear process

Существует также вариант, имея чек apllication, чтобы увидеть, если ехе запущен, попытка убить его вручную в вашем наконец, но я настоятельно советую против этого.