Убить родительский процесс без прав администратора - PullRequest
0 голосов
/ 30 сентября 2011

Как убить родительский процесс без прав администратора?Процесс A создает процесс B, а в процессе BI необходимо завершить процесс A.

Ответы [ 4 ]

2 голосов
/ 30 сентября 2011

Вы хотите, чтобы ProcessB дал сигнал ProcessA, что он хочет прекратить работу.Затем ProcessA может очистить любые ресурсы и корректно завершить работу (как это предлагается в комментариях к вашему ответу).Итак, как процесс сигнализирует что-то другому процессу?Это называется межпроцессным взаимодействием (IPC), и существует множество способов сделать это на одной и той же машине или на разных машинах, включая шины сообщений, веб-сервис, именованные каналы.

Простая опция - это общесистемный EventWaitHandle - хороший пример здесь Сигнализация родительскому процессу о том, что дочерний процесс полностью инициализирован

2 голосов
/ 30 сентября 2011

так что у вас есть исходный код для обоих процессов.в этом случае вы можете использовать именованное системное событие, такое как семафор, чтобы элегантно завершить процесс A. Например, создает именованный семафор в процессе A, передавая имя процессу B как один из параметров командной строкизапуск процесса B. Откройте существующий именованный семафор из процесса B и подайте ему сигнал, чтобы процесс A знал, что он может завершиться.Вы также можете использовать TaskKill, но не заканчивая A, изящно может привести к повреждению ресурсов, которые использует A.

2 голосов
/ 30 сентября 2011

Проверьте это :

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();
0 голосов
/ 30 сентября 2011

Все очень просто, если вы знаете parentProcessName, тогда решение будет таким:

System.Diagnostics.Process.GetProcessesByName ("ParentProcessName")[0].Kill();

Если нет, то будет немного сложнее.

...