C#调用COM组件后退出Excel进程
来源:互联网 发布:少女前线mac-10和mp5 编辑:程序博客网 时间:2024/05/18 01:46
我在使用WinForm程序调用Excel的COM组件的时候,也遇到了Excel进程退出的问题。这个问题很多人已经遇到,而且解决办法也吵得很热。
现在总结一下:
第一种方法是调用相关的组件释放方法,然后用代码调用垃圾收集器进行处理。这种方法比较正常,也就是说,是通过正规渠道来退出这个进程。
第二种方法是强制Kill相关的Excel进程。因为第一种方法可能会跟相关的环境有关,在有的机器上能够成功,而在某些机器上可能不会成功,所以,这时提出了一种比较尖锐的做法,那就是找到这个ExcelApplication相关的进程,然后强制杀掉。但是,这毕竟不是常规的退出某个进程的方法,不知道会不会造成内存碎片等问题,如果不是其他方式都不好用的话,不推荐使用
现在总结一下:
第一种方法是调用相关的组件释放方法,然后用代码调用垃圾收集器进行处理。这种方法比较正常,也就是说,是通过正规渠道来退出这个进程。
public void QuitExcel(ref Microsoft.Office.Interop.Excel.Application application) { application.Quit(); try { System.Runtime.InteropServices.Marshal.ReleaseComObject(application); } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); } finally { application = null; GC.Collect(); } }
第二种方法是强制Kill相关的Excel进程。因为第一种方法可能会跟相关的环境有关,在有的机器上能够成功,而在某些机器上可能不会成功,所以,这时提出了一种比较尖锐的做法,那就是找到这个ExcelApplication相关的进程,然后强制杀掉。但是,这毕竟不是常规的退出某个进程的方法,不知道会不会造成内存碎片等问题,如果不是其他方式都不好用的话,不推荐使用
[DllImport("User32.dll", CharSet = CharSet.Auto)]public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);public static void Kill(Microsoft.Office.Interop.Excel.Application excel){ excel.Quit(); IntPtr t = new IntPtr(excel.Hwnd); int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); p.Kill();}这里还有一点要提出的是,如果调用的COM组件所依附的应用程序退出的话,不管有没有对Excel进程进行额外的处理,这个Excel进程都会退出的。比如说,我使用的是WinForm程序调用的COM组件。现在我处理完Excel后,并没有处理Excel进程,而是直接点右上角的X关闭这个应用程序,那么Excel进程也就退出了。但是需要指出的是,很多WinForm程序并不是处理完Excel就要关闭的,还要进行很多额外的其他工作,所以,就有必要处理相关的Excel进程了。而且,如果是Web程序的话,会一直运行,如果不进行处理的话,这个Excel进程会一直存在。
- C#调用COM组件后退出Excel进程
- VC读取EXCEL后退出EXCEL进程
- C#调用COM组件
- c#中转出Excel时碰到Excel的COM组件没有注册的问题解决方法
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程
- C# COM组件操作Excel
- c# 中调用COM组件
- C#调用C++COM组件
- C++调用C# COM组件
- C++调用C# COM组件
- C++调用C# com组件
- C++调用C# COM组件
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程(公司实战项目经验)
- 调试Excel调用的COM组件
- 在使用C#调用COM组件操作Excel的时候阻止其他程序对此文件操作
- C# 调用excel后,杀掉excel进程
- VC调用C#写的COM+组件
- iOS开发:使用SQLite3存储和读取数据
- 冒泡生存10个字母并排序
- 【Android Training - Multimedia】捕获照片 [Lesson 1 - 简单的拍照动作]
- vim替换^m字符
- Android下Xml解析技术(2)之PULL解析Xml文件
- C#调用COM组件后退出Excel进程
- 64位RHEL6.2上安装oracle10gR2
- 思绪 冬天 雪 春天
- 给一个日期取出三个月中的星期一,星期三,星期五,星期日.
- android开发录音和播放录音的例子
- 解决 Agent admitted failure to sign using the key 问题 with ssh
- Web网页表单
- 2012.12.18 日志
- Android OpenGL ES 简明开发教程 07 <材质渲染>