以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何找到程序执行时的句柄的进程ID,然后杀掉该进程 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=95837) |
-- 作者:wh420 -- 发布时间:2017/2/6 18:00:00 -- 如何找到程序执行时的句柄的进程ID,然后杀掉该进程 问题1:程序反复打开多个EXCEL读取其中内容到狐表中,读取完成后关闭狐表,但只要程序不关闭系统进程中会有多个EXCEL进程,如何找到当前句柄的ID并杀掉该进程? (注:曾经用过GC.Collect();来回收垃圾,但程序执行完了始终还有一个EXCEL进程无法清除) 问题2:下面代码是我在网上找的,如何修改使其在狐表中生效 IntPtr t = new IntPtr(excelApp.Hwnd);
int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); p.Kill(); |
-- 作者:有点色 -- 发布时间:2017/2/6 18:15:00 -- 你用什么方式打开excel?
如果用vba打开,你要加入try catch,也就是最后一定要执行 app.quit 退出excel
如果要kill掉进程,参考
Dim ps As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
|
-- 作者:wh420 -- 发布时间:2017/2/6 18:59:00 -- GetWindowThreadProcessId用这个函数如何获得进程PID再进行KILL掉进程,不是盲目地见到EXCEL进程就杀掉。 |
-- 作者:wh420 -- 发布时间:2017/2/6 18:59:00 -- public void Close(bool isSave) { try { excelWorkBook.Close(isSave, Type.Missing, Type.Missing); excelApp.Quit(); } catch { IntPtr t = new IntPtr(excelApp.Hwnd); int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); p.Kill(); } excelWorkBook = null; excelApp = null; GC.Collect(); } |
-- 作者:wh420 -- 发布时间:2017/2/6 19:00:00 -- 用msexcel的方式打开EXCEL |
-- 作者:有点色 -- 发布时间:2017/2/6 20:10:00 -- 那就不可能有问题。上传实例说明 |