Come fa un UNICODE blocco di ambiente sguardo come per avviare un nuovo processo tramite CreateProcessW () su Windows?

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

Domanda

In sostanza, vorrei creare un nuovo processo e definire l'ambiente per esso dal processo genitore. Vorrei utilizzare CreateProcessW e passare un (modificato) ambiente Unicode in lpEnvironment, ma non sono sicuro di quello che il contenuto dovrebbe essere simile a fronte di un blocco di ambiente ANSII.

L'unica documentazione ho davvero trovato è su MSDN:

  

Si noti che un blocco di ambiente è ANSI   terminato da due byte zero: uno per   l'ultima stringa, un altro per terminare   il blocco. blocco di ambiente Un Unicode   è terminata da quattro byte zero: due   per l'ultima stringa, altri due per   interrompere il blocco.

Ora ho provato a

  1. chiamata GetEnvironmentStrings e passarlo al processo figlio
  2. chiamata GetEnvironmentStringsW e passarlo al processo figlio
  3. modificare questi blocchi con i miei ulteriori stringhe di ambiente e passarlo su

non di loro lavoro

I davvero solo potrebbe impostare lpEnvironment per NULL per farlo funzionare, ma ora avrei dovuto cambiare e tornare ai miei genitori di trasformazione dell'ambiente -? È che il modo di andare qui

(ho anche fatto insieme CREATE_UNICODE_ENVIRONMENT)

Qualcuno potrebbe dirmi che cosa c'è di così speciale blocchi ambiente UNICODE - ha fatto il lavoro, quando mi basta usare roba ASCII e call CreateProcessA() ...

È stato utile?

Soluzione

Non ho idea di che cosa si sta facendo male senza codice. Ma questo funziona:

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

Forse che vi darà un'idea di che cosa si sta facendo male.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top