Kill Process Excel C #

Je dois 2 traiter Excel. Par exemple:

1) exemple1.xlsx 2) exemple2.xlsx

Comment tuer le premier “exemple1.xlsx”?

J’utilise ce code:

foreach (Process clsProcess in Process.GetProcesses()) if (clsProcess.ProcessName.Equals("EXCEL")) //Process Excel? clsProcess.Kill(); 

Cela tue les deux. Je veux tuer un seul … Merci.

Le titre de ProcessMainWindow le fera pour vous, il ajoute “Microsoft Excel -” au nom du fichier:

Donc essentiellement (code rapide):

 private void KillSpecificExcelFileProcess(ssortingng excelFileName) { var processes = from p in Process.GetProcessesByName("EXCEL") select p; foreach (var process in processes) { if (process.MainWindowTitle == "Microsoft Excel - " + excelFileName) process.Kill(); } } 

Utilisation:

 KillSpecificExcelFileProcess("example1.xlsx"); 

Edit : Testé et vérifié pour fonctionner.

Si votre code actuel fonctionne, cet amendement devrait tuer le premier processus trouvé avec le nom “EXCEL”.

 foreach (Process clsProcess in Process.GetProcesses()) { if (clsProcess.ProcessName.Equals("EXCEL")) { clsProcess.Kill(); break; } } 

Si vous voulez tuer un processus spécifique , vous devrez donner un peu plus d’informations.

Excel sera toujours un processus unique, autant que je sache. Le même processus / Windows ouvre plusieurs documents à l’intérieur. Ce que vous voulez faire est d’utiliser l’automatisation Excel pour FERMER le document que vous souhaitez. Cela vous aidera peut-être à démarrer. http://support.microsoft.com/kb/302084

J’espère que cela t’aides.

Copier et coller ceci. C’est fait!

  System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("Excel"); foreach (System.Diagnostics.Process p in process) { if (!ssortingng.IsNullOrEmpty(p.ProcessName)) { try { p.Kill(); } catch { } } } 

Le message de kd7 est une réponse géniale et fonctionne bien, juste deux choses à append,

MainWindowTitle format MainWindowTitle est – "Filename.xlsx - Excel"

Si votre document Excel n’est pas visible, votre MainWindowTitle sera "" utilisé le "" pour MainWindowTitle va tuer tous les processus zombie excel ‘.

Vous devez vérifier les descripteurs de fichiers, qui sont ouverts par processus, puis le tuer.
Comment vérifier quel processus de descripteurs de fichiers est en attente: Comment obtenir la liste des descripteurs de fichiers ouverts par processus en C #?

 foreach (Process clsProcess in Process.GetProcesses()) { if (clsProcess.ProcessName.Equals("EXCEL") && HasFileHandle(fileName, clsProcess)) { clsProcess.Kill(); break; } } 

Essayez d’obtenir le titre de la fenêtre principale

  foreach (Process clsProcess in Process.GetProcesses()) { if (clsProcess.ProcessName.Equals("EXCEL")&& clsProcess.MainWindowTitle =="example") { clsProcess.CloseMainWindow(); break; } } 

viens de faire une recherche rapide sur Google, essayez Process.MainWindowTitle() pour obtenir le titre du processus Excel et décidez lequel vous voulez tuer.

Je ne suis pas sûr de cette méthode, mais j’espère que cela aidera:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainwindowtitle.aspx

Utilisez la logique ci-dessous pour empêcher les processus Zombie Excel dans le Gestionnaire de tâches

  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);