You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CreateProcessW创建进程时为何出现0x2(ERROR_FILE_NOT_FOUND)错误?

解决CreateProcessW调用返回ERROR_FILE_NOT_FOUND(0x2)的问题

你的代码核心问题是字符串类型不匹配:

  • CreateProcessW是Windows API的宽字符版本,要求第一个参数必须是const WCHAR*类型的宽字符串。
  • 你定义的debugee_path是const char*(多字节字符串),强行用reinterpret_cast转成宽字符指针后,系统会把多字节字节流当成宽字符解析,导致实际传递的路径是乱码,自然找不到文件。

修正后的代码

#include <Windows.h>
#include <iostream>

int main()
{
    // 使用L前缀定义宽字符串,匹配CreateProcessW的参数类型
    const WCHAR* debugee_path = L"C:\\WINDOWS\\system32\\notepad.exe";
    STARTUPINFOW startup_info = {};
    startup_info.cb = sizeof(STARTUPINFOW);

    PROCESS_INFORMATION process_information = {};

    BOOL success = CreateProcessW(
        debugee_path,  // 直接传入宽字符串,无需强制转换
        NULL,
        NULL,
        NULL,
        FALSE,
        0,
        NULL,
        NULL,
        &startup_info,
        &process_information
    );
    if (!success)
    {
        // 添加错误打印方便调试
        DWORD err = GetLastError();
        std::cout << "错误码: " << std::hex << err << std::endl;
        return 1;
    }

    // 关闭进程和线程句柄,避免资源泄漏
    CloseHandle(process_information.hProcess);
    CloseHandle(process_information.hThread);

    return 0;
}

额外注意事项

如果你的程序是32位,运行在64位Windows系统上,可能会遇到文件系统重定向问题:系统会把C:\WINDOWS\system32重定向到C:\WINDOWS\SysWOW64。若要调用64位的记事本,可改用路径L"C:\\WINDOWS\\Sysnative\\notepad.exe",或者调用Wow64DisableWow64FsRedirection临时关闭重定向(调用后记得恢复)。

内容的提问来源于stack exchange,提问作者user24684540

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:35:54