COM 객체와 닷넷의 가바지 컬렉션이 궁합이 맞지않아 프로세스가 종료되지 않는 현상이 자주 발생한다.
엑셀COM 프로세스가 종료되려면 Application, WorkBook, WorkSheet 등이 해제(release)되어야된다.
Microsoft.Office.Interop.Excel.Workbook pWorkbook = null; Microsoft.Office.Interop.Excel.Sheets pWorkSheets = null; Microsoft.Office.Interop.Excel.Worksheet pWorkSheet = null; m_ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); // 엑셀 내용 Start º º º º º // 엑셀 내용 End pWorkbook.Save(); releaseObject(m_ExcelApp); releaseObject(pWorkSheet); releaseObject(pWorkSheets); releaseObject(pWorkbook); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); private static void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception e) { obj = null; } finally { GC.Collect(); } } |
만약 Release 했는데도 EXCEL.EXE가 프로세스에 남아있다면 PID를 찾아 프로세스를 kill해주면 된다.
다음글에 작성...
'Programing > C#' 카테고리의 다른 글
C# ini 파일 읽기 쓰기 (0) | 2022.04.22 |
---|---|
C# Excel Process Kill ( 프로세스 죽이기 ) (0) | 2022.03.12 |
C# LOG파일 생성 (0) | 2022.03.12 |
C# CrossThread Error 해결 (0) | 2022.02.21 |
C# DataSet을 이용해서 파일정보(이름, 확장자, 수정일, 크기) 가져오기 (0) | 2022.02.09 |