【问题标题】:Can't kill EXCEL.EXE process after open and read excel file打开并读取excel文件后无法杀死EXCEL.EXE进程
【发布时间】:2011-03-09 17:18:59
【问题描述】:

我通过以下流程从 excel 中打开和读取数据:

ApplicationClass objApp = new ApplicationClass();  
Workbooks objBooks = objApp.Workbooks;
Workbook objBook = objBooks.Open(..)
// Do something (read data...)
...
objBook.Close(false, Missing.Value, Missing.Value);
objApp.Quit();
Marshal.ReleaseComObject(objBooks);
Marshal.ReleaseComObject(objBook);
Marshal.ReleaseComObject(objApp);
objBook = null;
objApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();

但经过上述过程,我检查了任务管理器,EXCEL.EXE 进程还活着,不要被杀死。请告诉我为什么,帮我解决一下!!!

【问题讨论】:

  • ApplicationClass实例中应该有quit方法。
  • 怀念这个方法,真的叫这个方法。
  • 我确实喜欢这样(如我上面的代码),但无法解决我的问题。请提前帮助我。

标签: c# excel com process


【解决方案1】:

这段代码怎么样

[DllImport("user32.dll")]
private static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out IntPtr ProcessId);

在你的所有代码之后,当你认为不需要excel 文件时,写下这段代码

IntPtr hwnd = new IntPtr(ExcelObj.Hwnd); // Your Excel Application name
IntPtr processId;
IntPtr foo = GetWindowThreadProcessId(hwnd, out processId);
Process proc = Process.GetProcessById(processId.ToInt32());
proc.Kill();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多