Kill Process Excel C#

j'ai pour 2 processus d'excel. Par exemple:

1) exemple1.xlsx 2) exemple2.xlsx

Comment tuer en premier" exemple1.xlsx"?

j'utilise ce code:

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

qui tuent les deux. Je veux tuer un seul... Remercier.

8
demandé sur Tomasz Nurkiewicz 2012-02-16 21:35:53

9 réponses

le titre ProcessMainWindow le fera pour vous, il ajoute "Microsoft Excel -" au nom du fichier:

donc essentiellement (code rapide):

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

utiliser:

KillSpecificExcelFileProcess("example1.xlsx");

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

8
répondu kd7 2012-02-16 18:03:15

si votre code actuel fonctionne, cette modification devrait tuer le premier processus qu'elle trouve 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 allez devoir donner un peu plus d'informations.

2
répondu raveturned 2012-02-16 17:43:40

Excel sera toujours un processus unique, AFAIK. Le même processus / windows ouvre plusieurs documents à l'intérieur. Ce que vous voulez faire est D'utiliser Excel automation pour fermer le document que vous voulez. Peut-être cela vous aidera à démarrer. http://support.microsoft.com/kb/302084

Espérons que cette aide.

1
répondu Ani 2012-02-16 17:43:21

copiez et collez ceci. De son fait!

 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 { }
         }
     }
1
répondu monkSinha 2017-07-05 10:33:12

kd7 post est une réponse impressionnante et fonctionne bien, juste deux choses à ajouter,

MainWindowTitle format - "Filename.xlsx - Excel"

si votre document excel n'est pas visible, alors votre MainWindowTitle sera "" en utilisant le "" pour MainWindowTitle tuera tous processus Zombie excel".

1
répondu Kezzla 2018-06-28 01:07:28

vous devez vérifier les poignées de fichier, qui sont ouvertes par le processus et puis le tuer.

Comment vérifier quel processus de gestion de fichier tient: Comment puis-je obtenir la liste des processus de gestion de fichiers ouverts en C#?

foreach (Process clsProcess in Process.GetProcesses())
{
    if (clsProcess.ProcessName.Equals("EXCEL") && HasFileHandle(fileName, clsProcess))
    {
       clsProcess.Kill();
       break;
    }
 }
0
répondu Giedrius 2017-05-23 12:10:43

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;
      }
   }
0
répondu Fiacc 2012-02-16 17:45:23

vient de faire une recherche rapide sur Google, essayez Process.MainWindowTitle() pour obtenir le titre du processus Excel, et de décider lequel est que 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

0
répondu JXITC 2012-02-16 17:46:18

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

 List<int> GetAllExcelProcessID()
    {
       List<int> ProcessID = new List<int>(); 
       if (currentExcelProcessID == -1)
        {
           List<System.Diagnostics.Process> currentExcelProcessList = System.Diagnostics.Process.GetProcessesByName("EXCEL").ToList();
           foreach(var item in currentExcelProcessList)
            {
                ProcessID.Add(item.Id);
            }
        }
       return ProcessID;
    }
int GetApplicationExcelProcessID(List<int> ProcessID1, List<int> 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<int> ProcessID1 = GetAllExcelProcessID();
                excel = new Excel.Application();
                List<int> ProcessID2 = GetAllExcelProcessID();
                currentExcelProcessID = GetApplicationExcelProcessID(ProcessID1, ProcessID2);
0
répondu user3255770 2014-01-31 03:00:51