簡體   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