繁体   English   中英

轻轻杀死进程

[英]Gently kill a process

我有一个Windows服务(C#),可扩展几个子本机进程(C ++)。

我想偶尔取消一下这些进程。 (轻轻地=让proc在下降之前完成工作)。

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

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

有谁知道可以使用什么其他方法来满足此要求?

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

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

看看使用QueueUserAPC的技术和我在这里描述的异常。 您可能会发现它很有用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM