有没有办法在Windows上以C ++编程方式设置环境路径?

时间:2009-02-10 11:50:16

标签: c++ winapi path environment-variables

有没有办法以编程方式设置全局Windows路径环境变量(C ++)?

据我所知,putenv仅为当前的应用程序设置它 直接在注册表(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)中进行更改也是一种选择,但如果有的话我会更喜欢API方法吗?

5 个答案:

答案 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随资源工具包提供的功能。