我最近发现了一个有趣的问题。使用setenvironmentvariable时,我可以使用process explorer获取新创建的环境变量。但是,当进程本身是32位,而操作系统是64位时,进程资源管理器(至少是v10 ~最新的v11.33)找不到新的变量。如果程序是本机64位的,那么一切都可以正常工作,就像32位操作系统上运行的32位进程一样。
setenvironmentvariable API调用应成功,因为返回值为true,而调用getenvironmentvariable将返回正确的值。此外,如果创建子进程,则可以使用进程资源管理器发现变量在新进程中设置正确。
如果这是SysWow64的限制,或者是ProcessExplorer中的一个bug,我不会这样做。有人知道吗?
还有,有没有办法正确地得到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;
}