[英]Windows Application - handle taskkill
我有一個C#應用程序,其Output Type
設置為Windows Application
,因此它基本上只是一個在后台運行的進程。 我可以在任務管理器中看到該進程,我正在嘗試從命令行優雅地終止它,並且還能夠在我的代碼中處理此終止。 我運行了taskkill /im myprocess.exe
,消息是
成功:使用PID 61向進程“MyProcess.exe”發送終止信號
我的問題是,在此之后我仍然可以在任務管理器中看到該過程。 如果我執行taskkill /f
它會關閉它,但我肯定不希望這樣,因為我需要在進程退出之前運行代碼。
如何處理我的應用程序中的“終止信號”,以便我可以執行必要的退出前操作然后退出?
如果您查找taskkill
實際執行的操作, 您會發現它將WM_CLOSE
消息發送到進程的消息循環。 因此,您需要找到一種方法來處理此消息並退出應用程序。
以下小型測試應用程序顯示了一種方法。 如果使用CTRL + F5快捷方式從Visual Studio運行它(以便進程在調試器之外運行),您實際上可以使用taskkill /IM [processname]
關閉它。
using System;
using System.Security.Permissions;
using System.Windows.Forms;
namespace TaskKillTestApp
{
static class Program
{
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
private class TestMessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == /*WM_CLOSE*/ 0x10)
{
Application.Exit();
return true;
}
return false;
}
}
[STAThread]
static void Main()
{
Application.AddMessageFilter(new TestMessageFilter());
Application.Run();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.