진짜 많이 검색해보고 나름대로 가장 심플하면서 확실한 방법을 찾은거같아서 글을 작성합니다.
그냥 Excel.EXE 프로세스를 죽이게 되면 다른 실행되있는 엑셀파일도 전부 날아가기때문에
엑셀의 PID(Process ID)를 획득 후 해당 ID에 대해서만 Kill하게 됩니다.
예제)
class Program { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
static void Main(string[] args) { Microsoft.Office.Interop.Excel.Application excel = null; Workbook workbook = null; Worksheet worksheet = null; uint processId = 0;
excel = new Microsoft.Office.Interop.Excel.Application(); // 엑셀 내용 Start º º º º º // 엑셀 내용 End GetWindowThreadProcessId(new IntPtr(excel.Hwnd), out processId); //PID 획득 workbook .Save(); workbook.Close(Type.Missing, Type.Missing, Type.Missing); excel.Quit();
if (processId != 0) { System.Diagnostics.Process excelProcess = System.Diagnostics.Process.GetProcessById((int)processId); excelProcess.CloseMainWindow(); excelProcess.Refresh(); excelProcess.Kill(); } } } |