Подтвердить что ты не робот

Отказ 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();
}
4b9b3361

Ответ 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, решите проблему.