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#-定时关闭进程。根据定时关闭进程做的自动关闭游戏小软件。

定时关闭进程,主要涉及到两个方面,一是如何找出要关闭的进程,并且关闭它,二是做到时间的控制,就是所谓的定时。...
  • hsk_scnu
  • hsk_scnu
  • 2017年02月19日 16:24
  • 1277

c# 使用Process调用外部程序时等待该进程结束后再执行住进程

process1.StartInfo.FileName = "调用程序的路径" //该程序使用最小化运行 process1.StartInfo.WindowStyle=ProcessWindowS...
  • jzz870519
  • jzz870519
  • 2010年06月11日 15:56
  • 9146

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

添加或删除应用程序定义的HandlerRoutine从调用进程的处理函数列表功能。Win32 API功能:添加或删除应用程序定义的HandlerRoutine从调用进程的处理函数列表功能。函数原型:B...
  • testcs_dn
  • testcs_dn
  • 2015年01月03日 16:17
  • 3456

C#控制台基础 用户不断输入直到输入exit 退出循环或是退出控制台

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 基础版 using System; using System.Collec...
  • yushaopu
  • yushaopu
  • 2016年08月29日 09:28
  • 4673

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

    /// /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID ...
  • proglovercn
  • proglovercn
  • 2015年01月15日 04:58
  • 4299

如何捕捉控制台程序的关闭事件

如何捕捉控制台程序的关闭事件
  • jiangxinyu
  • jiangxinyu
  • 2011年03月16日 14:04
  • 2070

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

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

C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出

C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出,这里使用到了Windows API SetConsoleCtrlHandler函数注意:在VS中调试执行时,在处理程序例程中设置断点...
  • testcs_dn
  • testcs_dn
  • 2015年01月03日 17:15
  • 4398

C#关闭进程树

Windows并不维护进程间的父子关系链,而是提供了另外一个妥协的办法 - Job对象。你可以自己维护相关的多个进程,或把多个进程放入一个Job对象中,以便统一管理。Windows task mana...
  • yulongguiziyao
  • yulongguiziyao
  • 2015年07月01日 09:32
  • 398

界面规范(CS)

1. 界面规范 1.1. 总体原则 l 以用户为中心。设计由用户控制的界面,而不是界面控制用户。 l 清楚一致的设计。所有界面的风格保持一致,所有具有相同含义的术语保持一致,且易于理解 l 拥有良好的...
  • summersnowgieno
  • summersnowgieno
  • 2006年02月06日 12:21
  • 1693
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#杀死手动关闭控制台程序,遗留的进程
举报原因:
原因补充:

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