Как выглядит блок среды Unicode Environments, чтобы начать новый процесс через CreateProcessW () в Windows?

StackOverflow https://stackoverflow.com/questions/4168369

Вопрос

По сути, я хотел бы создать новый процесс и определить окружающую среду для него из родительского процесса. Я хотел бы использовать CreateProcessW и пройти (модифицированную) среду Unicode в lpEnvironment, но я не уверен, что должен выглядеть контент по сравнению с блоком среды ANSII.

Единственная документация, которую я действительно нашел, находится на MSDN:

Обратите внимание, что блок среды ANSI прекращается двумя нулевыми байтами: один для последней строки, еще один для завершения блока. Блок среды Unicode завершается четырьмя нулевыми байтами: два для последней строки, еще два для завершения блока.

Теперь я пытался

  1. вызов GetEnvironmentStrings и передать его на детский процесс
  2. вызов GetEnvironmentStringsW и передать его дочерним процессом
  3. Изменить эти блоки с моим дополнительным строками среды и передайте его на

не из них работает

Я действительно только мог установить lpEnvironment к NULL Чтобы заставить его работать, но теперь мне пришлось бы изменить и вернуть мою среду обработки родителей - это то, что путь сюда?

(Я также сделал 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