Comment un look bloc d'environnement UNICODE comme pour lancer un nouveau processus via CreateProcessW () sous Windows?

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

Question

Pour l'essentiel, je voudrais créer un nouveau processus et définir l'environnement pour elle du processus parent. Je voudrais utiliser CreateProcessW et passer un (Modifiée) environnement UNICODE dans lpEnvironment, mais je ne suis pas sûr de ce que le contenu devrait ressembler par rapport à un bloc d'environnement ANSII.

La seule documentation que j'ai vraiment trouvé est sur MSDN:

  

Notez qu'un bloc d'environnement ANSI est   terminé par deux octets zéro: pour une   la dernière chaîne, un plus pour mettre fin à   le bloc. bloc Un environnement Unicode   se termine par quatre octets zéro: deux   pour la dernière chaîne, deux autres à   mettre fin au bloc.

Maintenant, j'essayé de

  1. GetEnvironmentStrings d'appel et de le transmettre au processus de l'enfant
  2. GetEnvironmentStringsW d'appel et de le transmettre au processus de l'enfant
  3. modifier ces blocs avec mes chaînes d'environnement supplémentaires et passer sur

non d'entre eux travaillent

Je ne pouvais vraiment que mettre lpEnvironment à NULL pour l'obtenir au travail, mais maintenant je dois changer et revenir traitement mes parents environnement - est que le chemin à parcourir ici

(J'ai aussi fait ensemble CREATE_UNICODE_ENVIRONMENT)

Quelqu'un pourrait-il s'il vous plaît me dire ce qui est si spécial sur les blocs d'environnement UNICODE - il a fait le travail, quand je viens d'utiliser des trucs et ASCII appel CreateProcessA() ...

Était-ce utile?

La solution

Je ne sais pas ce que vous faites mal sans code. Mais cela fonctionne:

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

Peut-être vous donner une idée de ce que vous faites mal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top