Имеется задача удалить несколько файлов по указанному пути, предварительно убив процесс удаляемого файла. Приведённый ниже код не вызывает ошибок при написании и при сборке в 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);
}
}
}
Если удалять один процесс то всё работает - убивается процесс и следом удаляется файл и программа завершается успешно. Но нужно именно несколько файлов таким образом удалить используя одну программу. Не могу понять где ошибка, надеюсь на Ваш профессионализм ;)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В данный момент идёт ознакомление с MVVM-паттерномКак правильно привязать DataContext к UserControl?
edictText1 - Это Plain Text (куда я ввожу данные, как консоль)
Доброго времени сутокРазбираюсь с исходником одной программы, которая распаковывает rar-файлы (NUnrar - https://nunrar