在ASP.Net中如何彻底杀死Excel进程

今天在一个项目中使用Dcom的方式获取数据,但是发现Excel进程有时候能杀死,有时候杀不死,导致上传文件时出错的偶发性BUG,经过多次测试,调用API的方式可以彻底杀死Excel进程的方法!

方法体:

  [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
        public static void KillExcel(Excel.Application excel)
        {
            IntPtr t = new IntPtr(excel.Hwnd); //得到这个句柄,具体作用是得到这块内存入口
            int k = 0;
            GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
            p.Kill(); //关闭进程k
        }

方法调用:

 

 Excel.Application app = null;
            Excel.Workbook workBook = null;
            Excel.Worksheet workSheet = null;
            object Missing = Type.Missing;

                app = new Excel.ApplicationClass();
                app.Workbooks.Close();
                app.Workbooks.Open(fileName, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing, Missing,
                    Missing, Missing, Missing, Missing);
                workBook = app.Workbooks[1] as Excel.Workbook;
                workSheet = workBook.Worksheets[1] as Excel.Worksheet;

…………
               workBook.Close(false, fileName, Missing);//关闭worksheet
                app.Workbooks.Close();//关闭workbook
                Marshal.ReleaseComObject(workBook);
                app.Quit();
                KillExcel(app);//彻底杀死Excel进程!

转载于:https://www.cnblogs.com/zhangxb/archive/2012/04/20/2460739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值