有没有办法以编程方式(C++)设置全局 Windows 路径环境变量?
据我所知, putenv 只为当前应用程序设置它。
直接在注册表(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
中更改也是一种选择,但如果有的话我更喜欢 API 方法?
5 回答
MSDN说:
调用 SetEnvironmentVariable 对系统环境变量没有影响。要以编程方式添加或修改系统环境变量,请将它们添加到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 注册表项,然后广播 WM_SETTINGCHANGE 消息,并将 lParam 设置为字符串“Environment”。这允许应用程序(例如 shell)获取您的更新。请注意,此键中列出的环境变量的值限制为 1024 个字符。
如前所述,要在机器级别更改 PATH只需更改此注册表项:
HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
但您也可以通过更改此注册表项在用户级别设置 PATH:
HKEY_CURRENT_USER\Environment\Path
您还可以通过将 application\Path 详细信息添加到此注册表项来在应用程序级别设置 PATH:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
没有 API - 更改注册表就是这样做的方法。更改后的值将用于更改后开始的流程。
另外:请注意,正在运行的应用程序必须主动处理设置更改消息,并且许多(大多数?)不这样做。
是的,你是对的。您还需要在不注销的情况下影响这些设置
使用 SendMessageTimeout API 使用 SMTO_ABORTIFHUNG 将 borad 转换消息发送到所有窗口 SETTINGCHANGE 参数(LPARAM)“环境”,持续几毫秒(5000)。
这就是资源工具包提供的 setX.exe 所做的。