C# Почему я не могу программно убить консольную программу, запущенную в планировщике заданий?

У меня есть консольная программа для запуска ежедневной партии. У меня есть пользовательский интерфейс, который я могу использовать для изменения параметров в базе данных, которую использует консольная программа.

Я подумал, что было бы здорово иметь возможность останавливать и запускать эту программу из пользовательского интерфейса, и я могу это сделать.

Тем не менее, у меня есть консольная программа, настроенная на запуск перед рабочим днем ​​с помощью планировщика заданий на случай перезагрузки машины - по крайней мере, я знаю, что программа будет запущена, когда начнется день.

Однако я не могу убить его, когда он был запущен планировщиком заданий. Получите «Доступ запрещен».

Почему? И как я могу это решить?


person Dave Tapson    schedule 21.04.2016    source источник
comment
Выполнять с правами администратора?   -  person Jeroen Heier    schedule 21.04.2016
comment
Можете ли вы вручную убить процесс из Task Manager? Появилось еще такое сообщение?   -  person Siyavash Hamdi    schedule 21.04.2016
comment
Да, можно убить с помощью диспетчера задач. Без проблем.   -  person Dave Tapson    schedule 21.04.2016
comment
Вы запустили свою программу до Run as administrator?   -  person Siyavash Hamdi    schedule 21.04.2016
comment
Приложение clickonce нельзя запускать от имени администратора?   -  person Dave Tapson    schedule 21.04.2016
comment
Какую версию Windows вы используете, какой код вы используете для завершения процесса и используете ли вы другую учетную запись для запуска процесса в планировщике заданий, чем учетная запись, которую вы используете для завершения процесса?   -  person Matt Jordan    schedule 21.04.2016
comment
В ОС Windows; Найдите исполняемый файл программы, которая убивает нужный процесс, для запуска щелкните его правой кнопкой мыши и выберите Run as administrator.   -  person Siyavash Hamdi    schedule 21.04.2016
comment
@Matt Windows 10 - почти тот же код, что и опубликованный Сиявашем ниже. Одинаковая учетная запись (моя учетная запись) для обоих.   -  person Dave Tapson    schedule 21.04.2016
comment
Возможно ли, что вы пытаетесь убить его более одного раза? Единственная причина, по которой вы можете получить отказ в доступе, основанная на описанном вами сценарии, — это попытка завершить процесс после того, как он уже начал завершать работу (см. примечание в конце msdn.microsoft.com/en-us/library/)   -  person Matt Jordan    schedule 21.04.2016
comment
Хм. У меня есть цикл, как показано ниже. Разбери его и посмотри.   -  person Dave Tapson    schedule 22.04.2016


Ответы (1)


Попробуйте использовать следующий метод:

private void KillProcessByProcessName(string strProcessName)
{
    foreach (Process p in System.Diagnostics.Process.GetProcessesByName(strProcessName))
        p.Kill();
}


e.g:

private void btnProcessKiller_Click(object sender, EventArgs e)
{
    KillProcessByProcessName("winword");
}
person Siyavash Hamdi    schedule 21.04.2016
comment
Это то, что я использую. Работает нормально, если я вручную запускаю процесс, который нужно убить, но не уничтожит тот же самый процесс, если я запущу его с помощью планировщика заданий. - person Dave Tapson; 21.04.2016