有没有办法以编程方式设置全局Windows路径环境变量(C ++)?
据我所知,putenv仅为当前的应用程序设置它
直接在注册表(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
中进行更改也是一种选择,但如果有的话我会更喜欢API方法吗?
答案 0 :(得分:26)
MSDN Says:
调用SetEnvironmentVariable没有 对系统环境的影响 变量。 以编程方式添加或 修改系统环境变量, 将它们添加到 HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\会话 然后是Manager \ Environment注册表项 广播WM_SETTINGCHANGE消息 将lParam设置为字符串 “环境”。这允许 应用程序,如shell,to 拿起你的更新。请注意 环境变量的值 此键中列出的内容仅限于1024 字符。
答案 1 :(得分:10)
如前所述,要更改计算机级别的PATH ,只需更改此注册表项:
HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
但您也可以通过更改此注册表项来设置用户级别的PATH:
HKEY_CURRENT_USER\Environment\Path
您还可以通过将application \ Path详细信息添加到此注册表项来在应用程序级别设置PATH:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
答案 2 :(得分:3)
没有API - 更改注册表是这样做的方法。更改后的值将用于更改后开始的流程。
另外:请注意,正在运行的应用程序必须主动处理设置已更改的消息,而许多(大多数?)不会这样做。
答案 3 :(得分:2)
如果您想通过注册表执行此操作,可能需要查看this程序的源代码。
Microsoft还提供了一个名为setx的小型命令行实用程序及其resource toolkits,它可以让您执行此操作。顺便说一句,常规set命令只允许你定义我认为的局部环境变量。
答案 4 :(得分:2)
是的你是对的。 您还需要在不注销的情况下实现这些设置
使用SendMessageTimeout API将borad强制转换消息发送到所有窗口SETTINGCHANGE,参数(LPARAM)“环境”使用SMTO_ABORTIFHUNG几毫秒(5000)。
这是setX.exe随资源工具包提供的功能。