关闭当前 EXCEL.EXE 进程
谷梁弘深
2023-12-01
解决方案一、
PublicMethod.Kill(oExcelApp); ///调用kill当前excel进程
PublicMethod.Kill()内容是:
using System.Runtime.InteropServices;
public class PublicMethod
{
public PublicMethod()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);
public static void Kill(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进程,而不是关闭所有的Excel进程。
缺点:必须获得服务器相应的权限,设置较为复杂,不易成功!
解决方案二、
private DateTime beforeTime; //Excel启动之前时间
private DateTime afterTime; //Excel启动之后时间
//举例
beforeTime = DateTime.Now;
Excel.Application xlApp = new Excel.Application();
afterTime = DateTime.Now;
///
/// 结束Excel进程
///
public void KillExcelProcess()
{
Process[] myProcesses;
DateTime startTime;
myProcesses = Process.GetProcessesByName("Excel");
//判断进程启动时间
foreach (Process myProcess in myProcesses)
{
startTime = myProcess.StartTime;
if (startTime > beforeTime && startTime < afterTime)
{
myProcess.Kill();
}
}
}
【说明】
优点:关闭Excel进程无需开设服务器权限,实现简单。
缺点:当同时操作的概率较高时,可能会错杀进程(概率较低)!
【总结】
解决方案二 基本可以满足常见项目的需求,可能更适合快速开发和部署。