我最近发现了一个有趣的问题。在使用 SetEnvironmentVariable 时,我可以使用 Process Explorer 来获取新创建的环境变量。但是,当进程本身为 32 位且操作系统为 64 位时,Process Explorer(至少 v10 ~ 最新 v11.33)无法找到新变量。如果程序是本机 64 位的,那么一切正常,就像在 32 位操作系统上运行的 32 位进程一样。
SetEnvironmentVariable API 调用应该是成功的,因为返回值为 TRUE 并且调用 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;
}