Отказ Process.Kill()
Когда я запускаю следующий код, Win32Exception генерируется для Access Denied. Я не могу найти какие-либо решения с помощью поиска. Как это исправить?
foreach (ListViewItem list in showprocesses.SelectedItems)
{
Process p = System.Diagnostics.Process.GetProcessById(Convert.ToInt32(list.Tag));
if (p != null)
p.Kill();
}
Ответы
Ответ 1
Обычно вы получите эту ошибку, если у вас нет необходимых разрешений. Вы должны быть администратором, а в win vista и выше запустите приложение/процесс в режиме повышенной. Кроме того, есть определенные процессы, которые даже в качестве администратора вы не сможете убить, некоторые из них считаются критичными для системы и т.д., И вам может понадобиться работать как system, а затем есть те, которые даже системы не могут убивать, например, антивирус или фактический вирус, потому что они не хотят, чтобы вы убивали свой процесс.
Другая возможность заключается в том, что если процесс уже завершает работу, он также выкинет это исключение, см. MSDN
Ответ 2
У меня были такие проблемы с приложением Delphi под Windows 8.1
Мое приложение закрывалось, но все еще находилось в фоновых процессах диспетчера задач.
Невозможно убить его с помощью TaskKill (проверенный режим администратора, "/F", из командной строки...)
Наконец, я узнал, что Windows "пометила" DLL моего приложения как "IgnoreFreeLibrary".
Вот почему мое приложение не закрывалось.
Вот выдержка из реестра:
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"{MyApplicationPathAndExeName}"="$ IgnoreFreeLibrary<DllWithProblemName.Dll>"
Я удалил запись в реестре, и все было в порядке.
Ответ 3
У меня была такая же проблема, и я использовал эти коды для решения проблемы:
[DllImport("user32.dll")]
public static extern int FindWindow(string ClassName, string WindowName);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_CLOSE = 0xF060;
private void button1_Click(object sender, RoutedEventArgs e)
{
int HWND = FindWindow(null, "My Window");//window title
SendMessage(HWND, WM_SYSCOMMAND, SC_CLOSE, 0);
}
Ответ 4
отключите UAC на windows, решите проблему.