J'ai récemment trouvé un problème intéressant. Lorsque vous utilisez SetEnvironmentVariable, je peux utiliser Process Explorer pour obtenir la variable d'environnement nouvellement créée. Toutefois, lorsque le processus lui-même est de 32 bits et le système d'exploitation de 64 bits, Process Explorer (au moins v10 ~ la dernière v11.33) ne peut pas trouver les nouvelles variables. Si le programme est natif 64 bits alors tout fonctionne bien, tout comme le processus 32 bits fonctionnant sur un système d'exploitation 32 bits.SetEnvironmentVariable en 32 bits Processus sur OS Windows 64 bits
L'appel de l'API SetEnvironmentVariable doit aboutir, car la valeur de retour est TRUE et l'appel GetEnvironmentVariable renvoie la valeur correcte. De plus, si vous créez un processus fils, vous pouvez trouver que la variable a été correctement définie dans le nouveau processus en utilisant Process Explorer.
Je ne suis pas si c'est la limitation de SysWOW64 ou un bogue dans Process Explorer. Quelqu'un sait?
Et, est-il possible d'obtenir correctement les variables d'environnement 32 bits? (Par exemple, la force Process Explorer pour fonctionner en mode 32 bits, ou d'autres outils)
source d'échantillon pour reproduire:
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
printf("setting variable... %s\n",
SetEnvironmentVariable("a_new_var", "1.0") ? "OK" : "FAILED");
printf("press anykey to continue...\n");
getchar();
// system(argv[0]); // uncomment to inspect the child process
return 0;
}
Alors, est-il possible d'obtenir des résultats corrects? Je ne peux pas trouver l'API pour changer le bloc d'env. 64 bits dans le processus de 32 bits, ni aucun commutateur pour que le PE fonctionne en mode 32 bits ... – Francis
Je ne pense pas. Si vous êtes désespéré, je peux vous recommander d'autres outils ... – wj32