首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于KILL EXCEL进程有关问题

2012-09-27 
关于KILL EXCEL进程问题由于现在在做维护发现以前有段关于杀死EXCEL进程的代码是这样写的:finally{// 删除

关于KILL EXCEL进程问题
由于现在在做维护发现以前有段关于杀死EXCEL进程的代码是这样写的:

  finally
  {
  // 删除进程中 Excel.exe
  foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
  {
  if (theProc.CloseMainWindow() == false)
  {
  theProc.Kill();
  }
  }
  }
这样其实很有问题,如果客户开了多个EXCEL会被一起KILL掉.有什么办法只把读进去的
那个EXCEL给KILL掉.

[解决办法]
在你的程序调用完Excel后写

workbook.Close(false, Missing.Value, Missing.Value);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(workbook);
xlApp.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp);
GC.Collect();
GC.WaitForPendingFinalizers();
[解决办法]

C# code
   /// <summary>        /// 导出Excel后,杀死Excel进程        /// </summary>        /// <param name="app"></param>        private static void KillProcess(_Excel.Application app)        {            IntPtr t = new IntPtr(app.Hwnd);            int k = 0;            GetWindowThreadProcessId(t, out k);            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);            p.Kill();        }        [DllImport("User32.dll", CharSet = CharSet.Auto)]        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out   int ID);
[解决办法]
探讨
在你的程序调用完Excel后写

workbook.Close(false, Missing.Value, Missing.Value);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(workbook);
xlApp.Quit();
System.Runtime.InteropServices.Marshal.……

[解决办法]
跟你说了文件打开跟这没关系

ThisApplication.Visible=false

才是决定是否显示的地方

热点排行