Ответ 1
Ну, вы, по сути, сталкиваетесь с той же проблемой, которая препятствует прекращению процесса Task Manager. Возможны две причины. Один из них связан с исключением, запрещенным доступом, процесс мог бы удалить право доступа к другим процессам для получения дескриптора процесса. Поскольку вы работаете в Windows 8, у вас установлен .NET 4.5. Что обеспечивает новый метод для класса Process, вы можете вызвать EnterDebugMode()
. То, что позволяет SeDebugPrivilege
, может быть достаточно хорошим, чтобы теперь работать Kill()
.
Другая проблема гораздо важнее, процесс может иметь поток, активный в режиме ядра, который не выходит. Лучший способ диагностировать это с помощью вкладки "Диспетчер задач", "Сведения", щелкните правой кнопкой мыши один из заголовков столбцов и выберите "Выбрать столбцы". Отметьте "Ручки". Посмотрите на отображаемое значение для процесса. Если вы видите ненулевое значение, у процесса, скорее всего, будет открыт дескриптор и ожидает, что драйвер устройства выполнит запрос ввода-вывода. И этот драйвер устройства в противном случае непроницаем для Windows, требуя отменить запрос. Сужение нарушителя не так просто, вам нужно больше узнать о том, какие запросы ввода-вывода выполняются вашим процессом. Следуйте за этим, задав вопрос об этом на superuser.com