iul*_*net 7 c# windows process
我有一个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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1716 次 |
| 最近记录: |