C-WinAPI GetLastError返回3

C-WinAPI GetLastError返回3,winapi,Winapi,GetLastError函数返回错误代码3,这说明找不到指定的路径。为什么?是否有使用WinAPI指定路径文件的特定方法?我知道路径文件是正确的,因为我复制粘贴了它 char tDirectory[] = "C:\\Windows\\System32\\notepad.exe"; if (!CreateProcess(tDirectory, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)

GetLastError函数返回错误代码3,这说明找不到指定的路径。为什么?是否有使用WinAPI指定路径文件的特定方法?我知道路径文件是正确的,因为我复制粘贴了它

char tDirectory[] = "C:\\Windows\\System32\\notepad.exe"; 

    if (!CreateProcess(tDirectory, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) {

        printf("Error creating process, with error code: %d\n", GetLastError());
        return 1;

    }

    printf("Process created...");

    return 0;

}

修复了我的代码,谢谢大家。

你的应用程序是32位的吗?如果是这样的话,你很可能已经被Windows搞砸了,Windows为32位应用程序提供了特定目录的文件系统过滤视图

要绕过此问题,您可以执行以下操作:

void *was;
Wow64DisableWow64FsRedirection (&was);
CreateProcess (...);
Wow64RevertWow64FsRedirection (was);

这应该可以解决问题。

可能在您运行的系统中不存在这样的路径。windows可能未安装在c中:。不需要硬代码路径,但在runtimeCreateProcess中检测路径。CreateProcess根据默认值定义为CreateProcessW。您应该使用TCHAR或CreateProcessA。我想这就是编译器警告的目的。如果显示的代码实际编译时带有OIT错误,则表示
CreateProcess()
已映射到
CreateProcessA()
,因此这不可能是解决方案。@Michael可能编译为C,与C++不同,重定向不会导致该错误。另外,禁用重定向是一件非常危险的事情。不要建议这样做。@DavidHeffernan你是对的-错误3表示找不到路径,这里不能这样。但是,禁用文件系统重定向程序也有其用途,因为它允许32位应用程序从(真实)system32目录启动64位应用程序。这最好使用sysnative。如果确实需要禁用重定向,请仅对调用线程执行此操作。
void *was;
Wow64DisableWow64FsRedirection (&was);
CreateProcess (...);
Wow64RevertWow64FsRedirection (was);