以编程方式设置全球环境变量
Setting global environment variables programmatically
我需要以编程方式设置环境变量。
Microsoft在此提供了文档。您只需要在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment
下的注册表中创建一个新值即可。该部分工作正常。
问题是这些更改仅在登录并再次登录后生效。
到达电路,他们建议执行这一小代码:
if (!SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM) "Environment", SMTO_ABORTIFHUNG,
5000, &dwReturnValue))
{
... take action in case of failure
}
我做到了这一点,SendMessageTimeout
返回TRUE
,但至少在Windows 10下,它没有效果。新打开的命令提示符窗口仍然不会显示新创建的变量。
我还尝试在高架过程中运行此代码,但结果仍然相同。
但是,当我使用系统applet更改环境变量时,我新创建的变量显示出来,当我在applet上单击确定时,当我打开另一个命令提示符时,该变量就在那里。
有什么想法?
通过明确调用 SendMessageTimeout
的 wide 版本来解决问题,并将"Environment"
作为 wide string发送: string:
SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM)L"Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);
正如迈克尔发现的那样,字符串宽度需要匹配A/W功能类型。WM_SETTINGCHANGE
在< WM_USER
范围内,将由Window Manager填写。
如果您不想硬编码函数名称后缀:
SendMessageTimeout(
HWND_BROADCAST,
WM_SETTINGCHANGE,
0,
(LPARAM) TEXT("Environment"),
SMTO_ABORTIFHUNG,
5000,
&dwReturnValue
);
相关文章:
- docker 构建失败:无法设置环境变量
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 在编译时为运行时设置环境变量
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- 在 Visual Studio 2017 C++项目中设置调试/运行环境变量
- 以编程方式设置全球环境变量
- 将 c++ 代码中的当前用户环境变量设置为对其他进程(如 cmds)可见
- TCL文件无法获取通过代码设置的环境变量
- 如何使用CMakeLists.txt为我的可执行文件设置bash中的环境变量
- 为特定过程的特定运行设置环境变量
- 退出后从C++程序永久设置环境变量
- 为英特尔C++编辑器"GCC not found"设置环境变量时出现问题
- php-cgi环境变量设置
- 如何在Qt中以编程方式为当前进程设置环境变量
- 我已经设置了 CPUPROFILE 环境变量和链接的 -lprofiler。为什么 gperftools 不启动探查器?
- 如何在安装MinGW (Windows 32位)时设置环境变量PATH
- C/MATLAB API接口环境变量设置影响OS X中的其他应用程序
- 在Windows 7下运行MinGW gcc编译器,不设置环境变量
- 从c++中为Batch设置临时环境变量