Как выглядит блок среды Unicode Environments, чтобы начать новый процесс через CreateProcessW () в Windows?
-
09-10-2019 - |
Вопрос
По сути, я хотел бы создать новый процесс и определить окружающую среду для него из родительского процесса. Я хотел бы использовать CreateProcessW
и пройти (модифицированную) среду Unicode в lpEnvironment
, но я не уверен, что должен выглядеть контент по сравнению с блоком среды ANSII.
Единственная документация, которую я действительно нашел, находится на MSDN:
Обратите внимание, что блок среды ANSI прекращается двумя нулевыми байтами: один для последней строки, еще один для завершения блока. Блок среды Unicode завершается четырьмя нулевыми байтами: два для последней строки, еще два для завершения блока.
Теперь я пытался
- вызов
GetEnvironmentStrings
и передать его на детский процесс - вызов
GetEnvironmentStringsW
и передать его дочерним процессом - Изменить эти блоки с моим дополнительным строками среды и передайте его на
не из них работает
Я действительно только мог установить 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());
}
Возможно, это даст вам представление о том, что вы делаете не так.