我有一个Windows服务(C#),它开发了一些子本地进程(C ++)。
我想偶尔轻轻地杀死这些进程。 (轻轻地=让过程在完成之前完成其工作)。
我尝试使用SetConsoleCtrlHandler()例程将子procs注册到控制台事件,并从C#代码调用CloseMainWindow()来引发“关闭控制台”事件。
这对我不起作用。主要是因为子进程不是控制台应用程序。
是否有人知道可以使用哪些其他方法来满足此要求?
答案 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();
}
}
}
}