2009-01-13 169 views
1

我有一个Windows服务(C#),这蔓延了几个子本地进程(C++)。轻轻地杀死一个进程

我想轻轻地杀死那些过程。 (轻轻地=让特效人员在下班前完成工作)。

我试图使用SetConsoleCtrlHandler()例程注册控制台事件的子过程,并从C#代码中调用CloseMainWindow()以提升“关闭控制台”事件。

这不适合我。主要是因为子进程不是控制台应用程序。

有谁知道可以使用其他方法来满足这个要求吗?

+0

Fugees fan?大声笑。 – 2009-01-13 16:43:15

回答

4

内核事件对象浮现在脑海:你的“经理”提出了一个名为事件。您的子进程应至少检查一次该事件的状态(或者有一个线程持续检查它)。

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

我的理解是,产卵儿童不是自己的服务。对? – 2009-01-13 15:18:20

+0

@Serge - 其实它不会说。他们被描述为“过程”,并描述了试图关闭它们,就好像它们是外部控制台应用程序一样,所以我做了他们的假设。 – 2009-01-13 15:27:45

2

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