.NET 4.x Корректное завершение приложения - C#
Формулировка задачи:
Хай!
Подскажите, кто в курсе, как послать сигнал завершения приложения (не убивая процесс) из другого приложения.
Сенкс!
Решение задачи: «.NET 4.x Корректное завершение приложения»
textual
Листинг программы
/// <summary>
/// Закрытие процесса при совпадении имени и если есть аргумента,
/// игнорирование процессов с совпадающим аргументом.
/// </summary>
/// <param name="processName">Наименование процесса</param>
/// <param name="appKey">Аргумент игнорирования</param>
/// <param name="waitForExitSec">Сколько ожидать времени для выхода процесса в сек.</param>
/// <returns>Возвращает False, если хотя бы один из найденных процессов не закрылся
/// и Null если процессы не были найдены</returns>
public static bool? CloseProcessByName(string processName, string appKey, int waitForExitSec)
{
bool? closed = null;
string wmiQuery = string.Format("select ProcessId, CommandLine from Win32_Process where Name like '%{0}%'", processName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
foreach (ManagementObject retObject in retObjectCollection)
{
string sp = String.Format("{0}", retObject["ProcessId"]);
int pid = int.Parse(sp);
string cml = String.Format("{0}", retObject["CommandLine"]);
if (appKey == null || !cml.ToLower().Contains(appKey))
{
closed = closed ?? true;
try
{
Process proc = Process.GetProcessById(pid);
proc.CloseMainWindow();
closed &= proc.WaitForExit(waitForExitSec * 1000);
}
catch (ArgumentException)
{
// игнорировать маловероятную ошибку связанную с истекшим сроком действия идентификатора.
}
}
}
return closed;
}