Как программно закрыть Excel при возникновении исключительной ситуации?

Рейтинг: 4Ответов: 2Опубликовано: 15.04.2015
try
{
    excelApp.Workbooks.Open(fileName);
    //Делаем что-то, что вызывает исключение
    //System.Runtime.InteropServices.COMException
}
catch (Exception ex)
{

}
finally
{
    //При дебаге в этот блок кода заходит, но в процессах 
    //остается висеть EXCEL.EXE
    excelApp.Quit();
}

Ответы

▲ 3

Попробуйте еще вызвать дополнительно (после Quit):

Marshal.FinalReleaseComObject(excelApp);

Надо также запоминать ссылку на открытую workbook, и аналогичным образом освобождать.

▲ 2

В данном коде создается две временных переменных, которые никто не освобождает:

excelApp.Workbooks.Open(fileName);

Нужно освобождать каждый объект:

var workbooks = excelApp.Workbooks;
var sheet = workbooks.Open(fileName);
...
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(sheet);

и т.д.