关于C#:UNICODE环境块看起来如何通过Windows上的CreateProcessW()启动新进程?

How does a UNICODE environment block look like to start a new process via CreateProcessW() on Windows?

从本质上讲,我想创建一个新进程并从父进程中为其定义环境。我想使用CreateProcessW并将(修改后的)UNICODE环境传递到lpEnvironment中,但是我不确定与ANSII环境块相比,内容应该是什么样。

我真正找到的唯一文档是在MSDN上:

Note that an ANSI environment block is
terminated by two zero bytes: one for
the last string, one more to terminate
the block. A Unicode environment block
is terminated by four zero bytes: two
for the last string, two more to
terminate the block.

现在我尝试

  • 调用GetEnvironmentStrings并将其传递给子进程
  • 调用GetEnvironmentStringsW并将其传递给子进程
  • 用我的其他环境字符串修改这些块并将其传递
  • 他们都不工作

    我真的只能将lpEnvironment设置为NULL才能正常工作,但是现在我必须进行更改


    我不知道没有代码您在做什么错。但这有效:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    STARTUPINFO startInfo = {0};
    PROCESS_INFORMATION procInfo = {0};

    WCHAR env[] = L"key=value\\0key2=value2\\0\\0";
    WCHAR cmdline[] = L"calc";

    startInfo.cb = sizeof(startInfo);
    if(!CreateProcessW(NULL, cmdline, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, env, NULL, &startInfo, &procInfo))
    {
        printf("Error %d\
    "
    , GetLastError());
    }

    也许会让您了解自己在做什么错。