gpt4 book ai didi

c++ - UNICODE 环境 block 如何通过 Windows 上的 CreateProcessW() 启动新进程?

转载 作者:行者123 更新时间:2023-11-28 08:25:39 26 4
gpt4 key购买 nike

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

我真正找到的唯一文档是在 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.

现在我尝试

  1. 调用GetEnvironmentStrings并将其传递给子进程
  2. 调用GetEnvironmentStringsW并将其传递给子进程
  3. 使用我的附加环境字符串修改这些 block 并将其传递

它们都不起作用

我真的只能将 lpEnvironment 设置为 NULL 才能让它工作,但现在我必须更改并恢复我 parent 的处理环境 - 是这样吗去这里?

(我也设置了CREATE_UNICODE_ENVIRONMENT)

谁能告诉我 UNICODE 环境 block 有什么特别之处 - 它确实有效,当我只使用 ASCII 东西并调用 CreateProcessA()...

最佳答案

如果没有代码,我不知道你做错了什么。但这有效:

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\n", GetLastError());
}

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

关于c++ - UNICODE 环境 block 如何通过 Windows 上的 CreateProcessW() 启动新进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com