Осторожно убить процесс - PullRequest
       7

Осторожно убить процесс

1 голос
/ 13 января 2009

У меня есть служба Windows (C #), которая создает несколько дочерних собственных процессов (C ++).

Я бы хотел аккуратно убивать эти процессы время от времени. (осторожно = дайте прокам завершить свою работу, прежде чем идти вниз).

Я попытался использовать процедуру SetConsoleCtrlHandler (), чтобы зарегистрировать дочерние процессы для консольных событий и вызвать CloseMainWindow () из кода C #, чтобы вызвать события «закрыть консоль».

Это не сработало для меня. Главным образом потому, что дочерние процессы не являются консольными приложениями.

Кто-нибудь знает, какие другие методы могут быть использованы для выполнения этого требования?

Ответы [ 4 ]

4 голосов
/ 13 января 2009

Объекты событий ядра приходят на ум: ваш "менеджер" вызывает событие с именем . Ваши дочерние процессы должны проверять состояние этого события хотя бы время от времени (или иметь поток, который постоянно проверяет его).

2 голосов
/ 13 января 2009

Опубликовать сообщение для дочерних процессов. Это может быть сообщение по вашему выбору, поэтому вы можете получить сообщение в дочерних процессах, а затем сделать то, что нужно сделать, см. WM_USER .

0 голосов
/ 13 января 2009

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

0 голосов
/ 13 января 2009

C # имеет собственный способ доступа к работающим службам. Вам потребуется пространство имен «System.ServiceProcess», и код должен выглядеть примерно так:

ServiceController[] services = ServiceController.GetServices(); 
for(int i = 0; i <  services.Length; i++)   
    {
       if (services[i].DisplayName == "COM+ System Application")  
            { 
               if (sc.Status == ServiceControllerStatus.Running) 
            { 
            sc.Stop(); 
            } 
        if (sc.Status == ServiceControllerStatus.Stopped) 
            { 
            sc.Start(); 
            } 
             } 
    } 
   }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...