CreateProcessA有效,CreateProcessW因访问冲突而失败

时间:2018-12-23 21:17:13

标签: c windows unicode utf-8

以下作品

#include <windows.h>

int main(int argc, char** argv)
{
    STARTUPINFOA  start_info = { 0 };
    PROCESS_INFORMATION process_info = { 0 };
    LPSTR str = "C:\\Windows\\System32\\PING.EXE";

    CreateProcessA(
        NULL,
        str,
        NULL,
        NULL,
        TRUE,
        CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS,
        NULL,
        NULL,
        &start_info,
        &process_info
    );

    return 0;
}

中可以看到
C:\Users\Admin\source\repos\ConsoleApplication1\Debug
λ ConsoleApplication1.exe

C:\Users\Admin\source\repos\ConsoleApplication1\Debug
λ echo %ERRORLEVEL%
0

但是我要实现utf8支持的宽版本却没有:

#include <windows.h>

int main(int argc, char** argv)
{
    STARTUPINFOW  start_info = { 0 };
    PROCESS_INFORMATION process_info = { 0 };
    LPWSTR str = L"C:\\Windows\\System32\\PING.EXE";

    CreateProcessW(
        NULL,
        str,
        NULL,
        NULL,
        TRUE,
        CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS,
        NULL,
        NULL,
        &start_info,
        &process_info
    );

    return 0;
}

可以在

中看到
C:\Users\Admin\source\repos\ConsoleApplication1\Debug
λ ConsoleApplication1.exe

C:\Users\Admin\source\repos\ConsoleApplication1\Debug
λ echo %ERRORLEVEL%
-1073741819

我不知道这是什么问题,因为两者都可以毫无问题地编译

使用调试器运行第二个会导致此错误:

  

在以下位置抛出异常:0x744106F2(KernelBase.dll)   ConsoleApplication1.exe:0xC0000005:访问冲突写入位置   0x00C47B68。发生

0 个答案:

没有答案