TerminateProcess在Windows 7中不起作用

时间:2011-01-05 13:04:33

标签: windows-7 windows-xp process windows-7-x64

我正在win7平台上用c ++编写一个应用程序,需要关闭另一个应用程序。 我使用的步骤是:

  1. 使用EnumProcess()枚举所有进程。
  2. 使用OpenProcess()打开Process句柄。访问权限为PROCESS_ALL_ACCESS | PROCESS_VM_READ。
  3. 然后使用EnumProcessModules()
  4. 枚举流程模块
  5. 我使用GetModuleBaseName()提取模块名称,并将其与我拥有的进程名称进行比较。
  6. 当我找到匹配项时,我使用TerminateProcess()来终止进程。
  7. 我面临的问题是它适用于WindowsXP,但不适用于Windows 7(64位)。使用getlasterror(), 我得到错误为“访问被拒绝”。我想这与访问权限有关。 有什么方法可以在这两个平台上做到这一点吗?或者是否有特定于win7的API?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。看起来很长的答案,终于找到了答案。

如果要终止其他程序,则需要一个句柄。句柄需要权限才能使用其他进程。终止进程需要一个名为PROCESS_TERMINATE的特定权限。打开句柄终止时使用它可能会起作用。它在Windows 7上为我做了。

总结一下,这里需要正确使用TerminateProcess的代码。小心处理;)

Declare Function OpenProcess Lib "kernel32" ( _
    ByVal dwDesiredAccess As Long, _
    ByVal bInheritHandle As Long, _
    ByVal dwProcessID As Long) As Long
Declare Function TerminateProcess Lib "kernel32.dll" ( _
    ByVal ApphProcess As Long, _
    ByVal uExitCode As Long) As Long

Const PROCESS_TERMINATE = &H1

Private Sub KillProcess(ByVal ProcessID As Long)
    Dim pHandle As Long
    pHandle = OpenProcess(PROCESS_TERMINATE, 0, ProcessID)
    Call TerminateProcess(pHandle, 0)
End Sub

答案 1 :(得分:1)

您是否以管理员权限运行程序,并且是否终止了对同一用户的处理?