Евгений Темиргалеев писал(а):
Угу. Даже excel.Quit; excel := NIL; Kernel.Collect....
Если сделать окно ёкзеля видимым, то Quit видимость убирает, а процесс остается. Может в ББ что-то его держит. Вот только что?
Проблема точно не в BB. Очень давно сталкивался с подобным и под .NET. Правда там эти процессы сами отмирали через некоторое (довольно большое) время. Решилось обертыванием работы с Excel в класс, экземпляр которого создавался локально в теле процедуры:
Код:
//код вне класса ExcelWork
bool result = false;
ExcelWork ew = new ExcelWork(this);
result = ew.GenExcel(gr, ods, GenPaged);
ew = null;
GC.Collect();
return result;
Кроме этого в этом классе был метод:
Код:
//метод класса ExcelWork
private void NAR(Object o)
{
try{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
finally{
o = null;
}
}
С помощью которого "добивались" объекты Excel:
Код:
//метод класса ExcelWork
Excel.Application excelApp = null;
Excel.Workbook wbk = null;
try
{
excelApp = new Excel.Application();
excelApp.UserControl = false;
excelApp.DisplayAlerts = false;
wbk = excelApp.Workbooks.Add(Missing.Value);
...............
wbk.Close(false,Missing.Value,Missing.Value);
NAR(wbk);
excelApp.Quit();
NAR(excelApp);
GC.Collect();
GC.WaitForPendingFinalizers();
}
catch(Exception e)
{
...............
Возможно обертывание в класс или NAR были лишними, точно уже не помню. Таже обратите внимание на UserControl и DisplayAlerts.