杀死进程Excel C#
我必须2处理excel。 例如:
1)example1.xlsx 2)example2.xlsx
如何杀死第一个“example1.xlsx”?
我用这个代码:
foreach (Process clsProcess in Process.GetProcesses()) if (clsProcess.ProcessName.Equals("EXCEL")) //Process Excel? clsProcess.Kill();
那杀了两个。 我想杀一个……谢谢。
ProcessMainWindow标题将为您完成,它将“Microsoft Excel – ”附加到文件的名称:
基本上(快速代码):
private void KillSpecificExcelFileProcess(string excelFileName) { var processes = from p in Process.GetProcessesByName("EXCEL") select p; foreach (var process in processes) { if (process.MainWindowTitle == "Microsoft Excel - " + excelFileName) process.Kill(); } }
使用:
KillSpecificExcelFileProcess("example1.xlsx");
编辑 :测试并validation工作。
如果您当前的代码正在运行,则此修订应该使用名称“EXCEL”终止它找到的第一个进程。
foreach (Process clsProcess in Process.GetProcesses()) { if (clsProcess.ProcessName.Equals("EXCEL")) { clsProcess.Kill(); break; } }
如果你想杀死一个特定的进程,你将不得不提供更多的信息。
Excel将永远是一个单一的过程,AFAIK。 相同的进程/窗口在其中打开多个文档。 您要做的是使用Excel自动化来关闭您想要的文档。 也许这会让你开始。 https://support.microsoft.com/kb/302084
希望这可以帮助。
复制并粘贴此内容。 完成!
System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("Excel"); foreach (System.Diagnostics.Process p in process) { if (!string.IsNullOrEmpty(p.ProcessName)) { try { p.Kill(); } catch { } } }
kd7的post是一个很棒的答案,效果很好,只需添加两件事,
MainWindowTitle
格式为 – "Filename.xlsx - Excel"
如果您的excel文档不可见,那么您的MainWindowTitle
将使用""
对MainWindowTitle
将“杀死所有僵尸excel进程”。
您需要检查由进程打开的文件句柄,然后将其终止。
如何检查哪个文件处理进程持有: 如何通过C#中的进程获取打开文件句柄列表?
foreach (Process clsProcess in Process.GetProcesses()) { if (clsProcess.ProcessName.Equals("EXCEL") && HasFileHandle(fileName, clsProcess)) { clsProcess.Kill(); break; } }
尝试获取主窗口标题
foreach (Process clsProcess in Process.GetProcesses()) { if (clsProcess.ProcessName.Equals("EXCEL")&& clsProcess.MainWindowTitle =="example") { clsProcess.CloseMainWindow(); break; } }
刚刚在Google上进行了快速搜索,尝试使用Process.MainWindowTitle()
来获取Excel进程的标题,并决定要杀死哪一个。
我不确定这种方法,但希望这会有所帮助:
https://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainwindowtitle.aspx
使用以下逻辑来防止任务管理器中的Zombie Excel进程
上述就是C#学习教程:杀死进程Excel C#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
List GetAllExcelProcessID() { List ProcessID = new List (); if (currentExcelProcessID == -1) { List currentExcelProcessList = System.Diagnostics.Process.GetProcessesByName("EXCEL").ToList(); foreach(var item in currentExcelProcessList) { ProcessID.Add(item.Id); } } return ProcessID; } int GetApplicationExcelProcessID(List ProcessID1, List ProcessID2) { foreach(var processid in ProcessID2) { if (!ProcessID1.Contains(processid)) { currentExcelProcessID = processid; } } return currentExcelProcessID; } void KillExcel() { System.Diagnostics.Process process = System.Diagnostics.Process.GetProcessById(currentExcelProcessID); process.Kill(); } List ProcessID1 = GetAllExcelProcessID(); excel = new Excel.Application(); List ProcessID2 = GetAllExcelProcessID(); currentExcelProcessID = GetApplicationExcelProcessID(ProcessID1, ProcessID2);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1034472.html