轻轻杀死一个进程

时间:2009-01-13 15:11:01

标签: c# c++ winapi

我有一个Windows服务(C#),它开发了一些子本地进程(C ++)。

我想偶尔轻轻地杀死这些进程。 (轻轻地=让过程在完成之前完成其工作)。

我尝试使用SetConsoleCtrlHandler()例程将子procs注册到控制台事件,并从C#代码调用CloseMainWindow()来引发“关闭控制台”事件。

这对我不起作用。主要是因为子进程不是控制台应用程序。

是否有人知道可以使用哪些其他方法来满足此要求?

4 个答案:

答案 0 :(得分:4)

内核事件对象浮现在脑海中:您的“经理”会引发一个名为的事件。您的子进程应该至少偶尔检查一次此事件的状态(或者有一个连续检查它的线程)。

答案 1 :(得分:2)

向子进程发布消息。这可以是您自己选择的消息,因此您可以在子进程中查看消息,然后执行需要完成的操作,请参阅WM_USER

答案 2 :(得分:0)

了解使用QueueUserAPC的技巧和我描述的here例外情况。您可能会发现它很有用。

答案 3 :(得分:-1)

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(); 
            } 
             } 
    } 
   }