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