我有一個Windows服務(C#),這蔓延了幾個子本地進程(C++)。輕輕地殺死一個進程
我想輕輕地殺死那些過程。 (輕輕地=讓特效人員在下班前完成工作)。
我試圖使用SetConsoleCtrlHandler()例程註冊控制檯事件的子過程,並從C#代碼中調用CloseMainWindow()以提升「關閉控制檯」事件。
這不適合我。主要是因爲子進程不是控制檯應用程序。
有誰知道可以使用其他方法來滿足這個要求嗎?
我有一個Windows服務(C#),這蔓延了幾個子本地進程(C++)。輕輕地殺死一個進程
我想輕輕地殺死那些過程。 (輕輕地=讓特效人員在下班前完成工作)。
我試圖使用SetConsoleCtrlHandler()例程註冊控制檯事件的子過程,並從C#代碼中調用CloseMainWindow()以提升「關閉控制檯」事件。
這不適合我。主要是因爲子進程不是控制檯應用程序。
有誰知道可以使用其他方法來滿足這個要求嗎?
內核事件對象浮現在腦海:你的「經理」提出了一個名爲事件。您的子進程應至少檢查一次該事件的狀態(或者有一個線程持續檢查它)。
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();
}
}
}
}
我的理解是,產卵兒童不是自己的服務。對? – 2009-01-13 15:18:20
@Serge - 其實它不會說。他們被描述爲「過程」,並描述了試圖關閉它們,就好像它們是外部控制檯應用程序一樣,所以我做了他們的假設。 – 2009-01-13 15:27:45
向子進程發佈消息。這可以是您自己選擇的消息,因此您可以在子進程中接收消息,然後執行需要完成的任務,請參閱WM_USER。
查看使用QueueUserAPC的技術和我描述的例外here。你可能會覺得它很有用。
Fugees fan?大聲笑。 – 2009-01-13 16:43:15