gpt4 book ai didi

windows - Windows:获取所有*当前*环境变量

转载 作者:行者123 更新时间:2023-12-03 11:10:33 27 4
gpt4 key购买 nike

目标:从我的应用程序中,我想启动任意命令,例如带有当前环境变量的cmd.exe,例如当我的应用程序运行且用户修改路径时,启动终端应获取新路径。

根据我的理解,如果启动了某个进程,它将从其启动过程中接收环境变量值(继承值或单个值)。在Windows上,可以通过读取注册表项来访问环境变量的最新值(请参阅question "Where are environment variables stored in registry?")。它们在配置时存储在注册表中,例如Comspec:%SystemRoot%\system32\cmd.exe。因此,您将需要其他环境变量(例如SystemRoot)的值来扩展它们。

不幸的是,当查看我从父进程收到的所有环境变量与我可以从注册表中读取的变量时,似乎有很大的不同。我只是不能使用继承的环境变量,而是用其值替换注册表配置的环境变量,因为那样的话,将以用户在应用程序运行时删除的自定义环境变量为准。

我在哪里可以找到Windows默认提供的环境变量,例如SystemRoot

最佳答案

CreateEnvironmentBlock WINAPI可用于获取当前环境变量。其bInherit参数使您可以选择是否从进程中继承变量。

演示它的C++代码段:

HANDLE userToken = 0;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &userToken))
{
_tprintf(_T("ERROR: OpenProcessToken"));
return 1;
}

void* envVars = 0;
if (!CreateEnvironmentBlock(&envVars, userToken, TRUE))
{
_tprintf(_T("ERROR: CreateEnvironmentBlock"));
return 1;
}

const wchar_t* iter = (const wchar_t*)envVars;
while (*iter)
{
_tprintf(_T("ENV: %s\n"), iter);
iter += _tcslen(iter) + 1;
}

DestroyEnvironmentBlock(envVars);

关于windows - Windows:获取所有*当前*环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57140076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com