关于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);
[解决办法]
[解决办法]
跟你说了文件打开跟这没关系
ThisApplication.Visible=false
才是决定是否显示的地方