windows - 获取上一个错误 127

标签 windows winapi

为什么下面的代码总是打印出127(“找不到指定的过程。”),即使它找到“firefox.exe”并成功终止??

#include<Windows.h>
#include <TlHelp32.h>
#include<iostream>
using namespace std;

int main( int, char *[] )
{
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (Process32First(snapshot, &entry) == TRUE)
    {
        while (Process32Next(snapshot, &entry) == TRUE)
        {
            if (_tcscmp(entry.szExeFile, TEXT("firefox.exe")) == 0)
            {  
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
                DWORD d = GetLastError();
                cout<<d<<'\n';
                TerminateProcess(hProcess,0);

                CloseHandle(hProcess);
            }
        }
    }

    CloseHandle(snapshot);

    return 0;
}

最佳答案

在检查 GetLastError 之前,您需要检查特定函数的返回值。

GetLastError 将始终返回由 API 函数设置的最后一个错误代码。但是,并非所有函数都会在它们成功 时设置最后一个错误代码。因此 GetLastError 的结果可能是在程序的其他部分设置的错误代码。

所以在您的情况下,根据 OpenProcess 的 MSDN 文档,如果失败,该函数将返回 NULL。因此,如果 OpenProcess 返回的不是 NULL,则无需查看 GetLastError

请注意,最后一个错误代码当前线程唯一的。

关于windows - 获取上一个错误 127,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10788904/

相关文章:

windows - 为什么我不能在 Rust 中将 `Stdio::piped()` 与 windows `cmd.exe` 一起使用?

当 .exe 在 Windows 7 32 位上运行时,使用 GCC 编译的 C 程序会导致 NVTDM 错误

c++ - 在 wincrypt 中设置 KP_P 时 CryptSetKeyParam 中的 NTE_BAD_DATA

winapi - 如何在 C++ WINAPI 中在窗口内绘制图标?

python - Python 3.4 上的 GetProcAddress 奇怪行为

亚马逊 AWS 上的 Windows XP

windows - 在远程机器上调用后台命令

windows - 在 Win 7 上在桌面上画线非常慢

c - 在不创建新线程的情况下将调试器附加到进程

C# 和 Win32 在单独的窗口关闭/关闭时通知