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.
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.
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.
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.
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 { }
}
}
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".
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;
}
}
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;
}
}
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
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);