Имеется код, который должен завершать процесс, который был запущен из указанной папки:
namespace newkill
{
class Program
{
static void Main() { }
string path = @"C:\Users\" + Environment.UserName + @"\AppData\Roaming\WindowsW0W32\";
public static void KillProcesses(string path)
{
Process.GetProcesses() // получаем все процессы
.Where(p => CheckIfProcessFileEquals(p, path)) // берем только те, в которых пути к файлу совпадают
.ToList()
.ForEach(p => p.Kill()); // убиваем каждый
}
private static bool CheckIfProcessFileEquals(Process process, string path)
{
try
{
return process.MainModule.FileName.Equals(path, StringComparison.InvariantCultureIgnoreCase); // сравниваем пути, инорим кейс
}
catch (Win32Exception)
{
return false; // если MainModule недоступен - скипаем
}
}
}
}
Файл запущен именно из этой папки - C:\Users\" + Environment.UserName + @"\AppData\Roaming\WindowsW0W32\ но после выполнения программы процесс не убивается. Что может быть не так? Версия .NET 3.5
У вас выполниться ровно то, что написано в Main:
static void Main() { }
Т.е ни-че-го.
Исправляйте:
static void Main()
{
var path = @"C:\Users\" + Environment.UserName + @"\AppData\Roaming\WindowsW0W32\file.exe";
KillProcesses(path);
}
Так же советую получать путь к AppData с помощью Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) и использовать Path.Combine() для конкатенации пути к файлу:
static void Main()
{
var path = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"Roaming",
"WindowsW0W32",
"file.exe");
KillProcesses(path);
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей