0

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

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

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

现在我试着

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

他们都不工作

我真的只能lpEnvironment开始NULL让它工作,但现在我必须改变和恢复我父母的处理环境——这是要走的路吗?

(我也做了设置CREATE_UNICODE_ENVIRONMENT

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

4

1 回答 1

1

我不知道你在没有代码的情况下做错了什么。但这有效:

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());
}

也许这会让你知道你做错了什么。

于 2010-11-12T20:37:25.617 回答