C# 记录控制台程序退出
有一个自动更新的程序,用C#做的控制台程序,需要记录各种日志,包括退出,部分实现代码(和main函数放在一层):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 [DllImport("kernel32.dll")] 2 private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); 3 4 public static void ClsMain() 5 { 6 // 用API安装事件处理 7 ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine); 8 bool bRet = SetConsoleCtrlHandler(newDelegate, true); 9 if (bRet == false) //安装事件处理失败 10 { 11 log.WriteLogFile("添加响应关闭事件失败"); 12 } 13 else 14 { 15 log.WriteLogFile("添加响应关闭事件成功"); 16 } 17 } 18 19 //当用户点击按钮关闭关闭Console时,系统会发送次消息 20 private const int CTRL_CLOSE_EVENT = 2; 21 //Ctrl+C,系统会发送次消息 22 private const int CTRL_C_EVENT = 0; 23 //Ctrl+break,系统会发送次消息 24 private const int CTRL_BREAK_EVENT = 1; 25 //用户退出(注销),系统会发送次消息 26 private const int CTRL_LOGOFF_EVENT = 5; 27 //系统关闭,系统会发送次消息 28 private const int CTRL_SHUTDOWN_EVENT = 6; 29 30 /// <summary> 31 /// 处理消息的事件 32 /// </summary> 33 private static bool HandlerRoutine(int CtrlType) 34 { 35 switch (CtrlType) 36 { 37 case CTRL_CLOSE_EVENT: 38 log.WriteLogFile("户点击按钮关闭,退出程序。"); 39 break; 40 case CTRL_C_EVENT: 41 log.WriteLogFile("Ctrl+C,退出程序。"); 42 break; 43 case CTRL_BREAK_EVENT: 44 log.WriteLogFile("Ctrl+break,退出程序。"); 45 break; 46 case CTRL_LOGOFF_EVENT: 47 log.WriteLogFile("用户退出(注销),退出程序。"); 48 break; 49 case CTRL_SHUTDOWN_EVENT: 50 log.WriteLogFile("系统关闭,退出程序。"); 51 break; 52 } 53 return false; 54 }