Как убить родительский процесс без прав администратора?Процесс A создает процесс B, а в процессе BI необходимо завершить процесс A.
Вы хотите, чтобы ProcessB дал сигнал ProcessA, что он хочет прекратить работу.Затем ProcessA может очистить любые ресурсы и корректно завершить работу (как это предлагается в комментариях к вашему ответу).Итак, как процесс сигнализирует что-то другому процессу?Это называется межпроцессным взаимодействием (IPC), и существует множество способов сделать это на одной и той же машине или на разных машинах, включая шины сообщений, веб-сервис, именованные каналы.
Простая опция - это общесистемный EventWaitHandle - хороший пример здесь Сигнализация родительскому процессу о том, что дочерний процесс полностью инициализирован
так что у вас есть исходный код для обоих процессов.в этом случае вы можете использовать именованное системное событие, такое как семафор, чтобы элегантно завершить процесс A. Например, создает именованный семафор в процессе A, передавая имя процессу B как один из параметров командной строкизапуск процесса B. Откройте существующий именованный семафор из процесса B и подайте ему сигнал, чтобы процесс A знал, что он может завершиться.Вы также можете использовать TaskKill, но не заканчивая A, изящно может привести к повреждению ресурсов, которые использует A.
Проверьте это :
Taskkill Заканчивает одну или несколько задач или процессов. Процессы могут быть убиты идентификатор процесса или имя изображения. Синтаксис taskkill [/ s Компьютер] [/ u Домен \ Пользователь [/ p Пароль]]] [/ fi FilterName] [/ pid ProcessID] | [/ im ImageName] [/ f] [/ t] / t: указывает на завершение всех дочерних процессов вместе с родительским процесс, обычно известный как убить дерево.
Taskkill
Заканчивает одну или несколько задач или процессов. Процессы могут быть убиты идентификатор процесса или имя изображения. Синтаксис
taskkill [/ s Компьютер] [/ u Домен \ Пользователь [/ p Пароль]]] [/ fi FilterName] [/ pid ProcessID] | [/ im ImageName] [/ f] [/ t]
/ t: указывает на завершение всех дочерних процессов вместе с родительским процесс, обычно известный как убить дерево.
Вы можете запустить процесс в C #, например:
using System.Diagnostics; string args = ""; // write here a space separated parameter list for TASKKILL Process prc = new Process(new ProcessStartInfo("Taskkill", args)); prc.Start();
Все очень просто, если вы знаете parentProcessName, тогда решение будет таким:
System.Diagnostics.Process.GetProcessesByName ("ParentProcessName")[0].Kill();
Если нет, то будет немного сложнее.