我最近發現了一個有趣的問題。當使用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