使用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也就不会起作用了。

如下图:

                               使用TerminateProcess结束进程时,错误码为5的解决方法_第1张图片

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

后来发现了方法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不熟悉,没有全局把握。

你可能感兴趣的:(使用TerminateProcess结束进程时,错误码为5的解决方法)