当前位置: 首页 > article >正文

使用TerminateProcess结束进程时,错误码为5的解决方法

      最近在win7上,VS2010开发环境中,写一个守护进程的程序,程序内容:发现目标进程挂起后,将其kill,然后重启。

可是,遇到了一个问题,就是在使用TerminateProcess进行kill目标进程时,kill失败,利用GetLastError()获取错误代码为5,“5”表示拒绝访问。在网上查了下资料,大概有2中解决方法:

      方法1:获取管理员权限。

在应用程序的Manifest禁用UAC Virtualization,取消其对数据写操作的重定向。具体做法:项目--》***属性--》连接器--》清单文件,我们设置启用UAC(Enable User Account Control),并且在UAC Execution Level中设置请求管理员权限。这样,应用程序在启动的时候,就会向用户请求管理员权限,当应用程序获得管理员执行权限后,当然可以向任意目录写入数据,UAC Virtualization也就不会起作用了。

如下图:

                               

              但是,我这样做了,却不起作用。我开始纠结了,什么原因呢?

后来发现了方法2,解决了我的问题。欣喜若狂啊!

      方法2:在OpenProcess的时候权限设置的不对。

                原因是OpenProcess是设置的权限不够,应该加上PROCESS_TERMINATE权限,具体可参考MSDN中的OpenProcess函数的说明。

              将参数DWORDexitCode 设置成PROCESS_ALL权限即可使用。

             TerminateProcess结束进程的具体代码如下:       

             --------------------------------------------------------------------------

             HANDLE   hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);

             TerminateProcess(hProcess,uExitCode);

             --------------------------------------------------------------------------

最后,我用方法2解决了我的问题。感觉自己对这些API不熟悉,没有全局把握。

http://www.lryc.cn/news/2414672.html

相关文章:

  • 常量指针与指针常量的区别
  • 信道估计(channel estimation)图解——从SISO到MIMO原理介绍
  • tbody标签的作用介绍
  • CreateEvent的理解
  • 短剧小程序源码|小程序短剧平台源码搭建
  • background属性介绍
  • [翻译] LaTeX 中的列表
  • 内存地址的计算方法
  • ROS2 学习笔记(一)新建项目的基础流程
  • 分享个好用的开源录屏工具 Captura
  • 高速收发器之发送器详解(Transmitter)
  • 计算机程序设计艺术 介绍
  • CreateMutex创建互斥内核对象
  • 目前最受欢迎的12个Python web框架,你用过几个?
  • SqlCommand.ExecuteNonQuery()方法的使用注意
  • Delicatessen音乐名词什么意思
  • Tribon二次开发-COM接口的使用(抽取数据)
  • 全球免费公共 DNS 解析服务器 IP 地址列表推荐 (解决无法上网/加速/防劫持)
  • dubbo和zookeeper
  • Bloom filter 过滤(布隆过滤算法)原理
  • C语言实现集合的基本运算
  • 洛谷4438 [Hnoi2018]道路 【树形dp】
  • 多质量动态系统仿真(Matlab代码实现)
  • 推荐文章:领略东方Project新境界 —— thprac,你的弹幕射击游戏进阶之路
  • 以太坊的单位wei是什么?
  • Winrar通用注册码
  • cellpadding跟cesllspacing区别有什么(table篇)
  • 如何学习数据库
  • CTF比赛总结(小白必看)
  • DWR基本原理及其流程