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

我真正发现的唯一文档是在MSDN上:

请注意,一个ANSI环境块由两个零字节终止:一个用于最后一个字符串,另一种是终止块。一个Unicode环境块由四个零字节终止:最后一个字符串,另外两个以终止块。

现在我试图

  1. 称呼 GetEnvironmentStrings 并将其传递给孩子的过程
  2. 称呼 GetEnvironmentStringsW 并将其传递给儿童过程
  3. 用我的其他环境字符串修改这些块,然后将其传递

他们中的非工作

我真的只能设置 lpEnvironmentNULL 为了使它工作,但是现在我必须改变和恢复父母处理环境 - 这是去这里的路吗?

(我也设定了 CREATE_UNICODE_ENVIRONMENT)

谁能告诉我什么特别的 UNICODE 环境块 - 当我只使用时,它确实有效 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());
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top