我最近发现了一个有趣的问题。当使用SetEnvironmentVariable时,我可以使用Process Explorer来获取新创建的环境变量。但是,当进程本身为32位,OS为64位时,Process Explorer(至少v10〜最新的v11.33)无法找到新变量。如果程序是原生64位,那么一切正常,就像在32位操作系统上运行的32位进程一样。64位Windows操作系统中的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;
}
那么无论如何要得到正确的结果吗?我无法找到API来更改32位进程内的64位env块,也没有任何开关让PE在32位模式下工作... – Francis 2010-01-18 10:13:46
我不这么认为。如果你绝望,我可以推荐其他工具,但... – wj32 2010-01-18 11:34:46