C# - Не работает множественный вызов функции

175
16 сентября 2017, 21:59

Имеется задача удалить несколько файлов по указанному пути, предварительно убив процесс удаляемого файла. Приведённый ниже код не вызывает ошибок при написании и при сборке в Visual Studio но при открытии собранного файла убивается только первый процесс и затем вылетает окошко с ошибкой, соответственно остальные процессы не убиваются и файлы не удаляются. Вот это окошко:

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
namespace newkill
{
    class Program
    {
        ////////
        ///////
        //////
        public static void KillProcess(string path)
        {
            Process.GetProcesses() // получаем все процессы
                .Where(p => CheckIfProcessFileEquals(p, path)) // берем только те, в которых пути к файлу совпадают
                .ToList()
                .ForEach(p => {
                  p.Kill();
                  p.WaitForExit();
                });  // убиваем каждый
        }
        private static bool CheckIfProcessFileEquals(Process process, string path)
        {
            try
            {
                return process.MainModule.FileName.Equals(path, StringComparison.InvariantCultureIgnoreCase); // сравниваем пути, инорим кейс
            }
            catch (Win32Exception)
            {
                return false; // если MainModule недоступен - скипаем
            }
        }
        //////
        ///////
        ////////

        static void Main()
        {


            var path_calc = @"C:\Users\" + Environment.UserName + @"\AppData\Roaming\calc.exe";
            var path_calc1 = @"C:\Users\" + Environment.UserName + @"\AppData\Roaming\calc1.exe";
            var path_calc2 = @"C:\Users\" + Environment.UserName + @"\AppData\Roaming\calc2.exe";
            KillProcess(path_calc);
            KillProcess(path_calc1);
            KillProcess(path_calc2);

            // Удаляем файл
            if (System.IO.File.Exists(path_calc))
                {
                    System.IO.File.Delete(path_calc);
                }
            if (System.IO.File.Exists(path_calc1))
                {
                    System.IO.File.Delete(path_calc1);
                }
            if (System.IO.File.Exists(path_calc2))
                {
                    System.IO.File.Delete(path_calc2);
                }

            Environment.Exit(0);

        }



    }
}

Если удалять один процесс то всё работает - убивается процесс и следом удаляется файл и программа завершается успешно. Но нужно именно несколько файлов таким образом удалить используя одну программу. Не могу понять где ошибка, надеюсь на Ваш профессионализм ;)

READ ALSO
Как привязать DataContext к UserControl?

Как привязать DataContext к UserControl?

В данный момент идёт ознакомление с MVVM-паттерномКак правильно привязать DataContext к UserControl?

203
Введенные цифры в Plain Text не парсятся в int C#

Введенные цифры в Plain Text не парсятся в int C#

edictText1 - Это Plain Text (куда я ввожу данные, как консоль)

148
Добавление элементов в StackPanel

Добавление элементов в StackPanel

Пытаюсь динамически добавлять элементы в StackPanel

220
Передача массива байт на вход методу

Передача массива байт на вход методу

Доброго времени сутокРазбираюсь с исходником одной программы, которая распаковывает rar-файлы (NUnrar - https://nunrar

143