Недавно я нашел интересную проблему. При использовании SetEnvironmentVariable я могу использовать Process Explorer для получения вновь созданной переменной окружения. Однако, когда сам процесс составляет 32 бит, а ОС - 64 бит, Process Explorer (по крайней мере, v10 ~ последний v11.33) не может найти новые переменные. Если программа является родной 64-битной, все работает нормально, так же как и 32-разрядный процесс, запущенный на 32-битной ОС.SetEnvironmentVariable в течение 32-битного процесса на 64-битной ОС Windows
Вызов API SetEnvironmentVariable должен быть успешным, поскольку возвращаемое значение имеет значение ИСТИНА, а вызов GetEnvironmentVariable возвращает правильное значение. Также, если вы создаете дочерний процесс, вы можете найти, что переменная была правильно установлена в новом процессе с помощью Process Explorer.
Я не, если это ограничение SysWOW64 или ошибка в Process Explorer. Кто-нибудь знает?
И, есть ли способ получить 32-битные переменные среды правильно? (Например, сила Process Explorer для работы в 32-битном режиме, или некоторые другие инструменты)
источник образца для воспроизведения:
#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;
}
Так или иначе, чтобы получить правильные результаты? Я не могу найти API для изменения 64-битного блока env внутри 32-битного процесса, а также никаких переключателей для PE для работы в 32-битном режиме ... – Francis
Я так не думаю. Если вы в отчаянии, я могу порекомендовать другие инструменты, хотя ... – wj32