簡體   English   中英

Windows應用程序 - 處理taskkill

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM