Метод process.kill () не работает в Windows 7 - PullRequest
0 голосов
/ 06 марта 2012

Я хочу убить процесс из списка.Из-за этого я сначала перечисляю процессы, а затем использую process.kill().Но это не работает.Ниже приведен код, и я не знаю, что я делаю неправильно или что я должен делать.(У меня Windows 7).Вы можете помочь?

private void btnProcess_Click(object sender, EventArgs e)
        {
            UpdateProcessList();
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            try
            {
                foreach (Process p in Process.GetProcesses())
                {
                    string strName = listBox1.SelectedItem.ToString();

                    if (p.ProcessName == strName)
                    {
                        p.Kill();
                    }
                    listBox1.Items.Remove(strName);
                }
                UpdateProcessList();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void UpdateProcessList()
        {
            listBox1.Items.Clear();
            foreach (Process p in Process.GetProcesses())
            {
                listBox1.Items.Add(p.ProcessName);
            }
            listBox1.Sorted = true;
        }

Ответы [ 3 ]

4 голосов
/ 06 марта 2012
            foreach (Process p in Process.GetProcesses())
            {
                string strName = listBox1.SelectedItem.ToString();

                if (p.ProcessName == strName)
                {
                    p.Kill();
                }
                listBox1.Items.Remove(strName);
            }

В вашем коде есть логическая ошибка. Вы вызываете метод Remove (), даже если имя процесса не соответствует , а не . Этот код может работать только в том случае, если выбранный элемент является первым, возвращаемым GetProcesses (), для этого очень низкие шансы. Гораздо более распространенный результат заключается в том, что вы удаляете элемент из списка на самом первом проходе цикла и в итоге ничего не убиваете. Легко увидеть с помощью отладчика.

Простой обходной путь - переместить вызов Remove () в блок оператора if ().

Совершенно лучший подход:

        foreach (var p in Process.GetProcessesByName(listBox1.SelectedItem.ToString()) {
            p.Kill();
        }
0 голосов
/ 06 марта 2012

Чтобы убить процесс, вы должны запускаться под учетной записью администратора.Это означает, что вы либо «настоящий» администратор, либо вы отключили контроль учетных записей (UAC).

В противном случае Process.Kill () завершится неудачей.

0 голосов
/ 06 марта 2012

Это потому, что у вас нет прав администратора.

Следуйте приведенному ниже сообщению

программным способом уничтожить процесс в Vista / Windows 7 в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...