C#杀死手动关闭控制台程序,遗留的进程

原创 2016年06月01日 14:14:54

先贴.cs文件,再写调用方法:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;


namespace VMAIMComputingNode
{
    class ConsolControl
    {


        private delegate bool ConsoleCtrlDelegate(int dwCtrlType);
        const int CTRL_CLOSE_EVENT = 2;//关闭控制台事件
  
        ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine);
     
        [DllImport("kernel32.dll")]
        private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine,bool Add);


        public bool KillCameraPro()
        {


            if (!SetConsoleCtrlHandler(newDelegate, true))
            {
                Console.WriteLine("API注入失败,不能自动关闭camera进程");
                return false;
            }


            return true;
        }


        static bool HandlerRoutine(int CtrlType)
        {
            switch (CtrlType)
            {
                case CTRL_CLOSE_EVENT:       //用户要关闭Console了
                                             // Console.WriteLine();
                    Process[] p = Process.GetProcessesByName(Path.GetFileNameWithoutExtension("CameraData.exe"));
                    foreach (Process pp in p)
                    {
                        pp.Kill();
                    }
                    Console.WriteLine("任务还没有完成,确认要退出吗?(Y/N)");
                    ConsoleKeyInfo ki = Console.ReadKey();
                    return ki.Key == ConsoleKey.Y;
                default:
                    return true;
            }
        }
    }
}


调用方法:

前提,同一命名空间中

 ConsolControl cc = new ConsolControl();
           bool resullt= cc.KillCameraPro();

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C# 强制关闭当前程序进程(完全Kill掉不留痕迹)

    /// /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID ...

C#控制台程序中处理2个关闭事件的代码实例

From: http://www.cnblogs.com/lvxiangjack/p/5363627.html 我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用...

C#捕获windows关机事件,在系统关机前做一些自己想做的事

C#捕获windows关机事件,在系统关机前做一些自己想做的事;有些时候我们可能想在Windows关机时记录或处理一些事情,这里提供几种方法。方法一: /// /// ...

捕获控制台程序关闭事件(SetConsoleCtrlHandler

有时候运行在服务器上的控制台程序,需要记录详细的运行日志,这就需要对程序关闭进行日志记录,以便能根据日志了解程序的运行状况。比如正在运行的程序被人不小心关闭了,导致最终任务没有运行成功,这时日志也没有...

将c#控制台程序关闭按钮取消

最近代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy...

C# C#实现控制台退出控制

C#捕获控制台(console)关闭事件有时,公司内部自己开发的控制台(console)应用程序在服务器上运行会因为遇到某些异常自动关闭了,这就需要用某机制来捕获控制台(console)关闭事件,把这...
  • rise51
  • rise51
  • 2011年01月13日 13:19
  • 1100

C#实现关闭某个指定程序

C#实现关闭某个指定程序 该文主要是介绍怎么实现C#关闭计算机正在运行的某个程序。 首先,获取电脑正在运行的所有的程序: private void button2_Click(ob...

关于C#关闭窗体后,依旧有后台进程在运行的解决方法

话不多说直接粘贴链接,这个博主写的非常详细 http://www.cnblogs.com/HappyEDay/p/5713707.html 这里粘贴原文权当备份了。 C#中WinForm程序退...
  • mainbyz
  • mainbyz
  • 2017年03月22日 10:40
  • 2728

C#注册控件处理程序(SetConsoleCtrlHandler)函数示例 控制台关闭事件改写

添加或删除应用程序定义的HandlerRoutine从调用进程的处理函数列表功能。Win32 API功能:添加或删除应用程序定义的HandlerRoutine从调用进程的处理函数列表功能。函数原型:B...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#杀死手动关闭控制台程序,遗留的进程
举报原因:
原因补充:

(最多只允许输入30个字)