[英]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.