使用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
相关产品推荐
相关产品推荐

