2009-01-13 124 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