我想创build一个.bat文件,在Windows PATHvariables的值的末尾添加一些string。 警告,我希望这个更改是明确的,而不是只为当前会话工作。
有人知道一个办法吗? 尽可能多的它不应该依赖于Windows的版本
如何使用systemD重新启动服务时,下来?
我如何读取C ++中的系统信息?
系统($ cmd)在PHP中超时
Git Pull和git push命令之间的起源主和起源/主站之间的区别
对不起,很长的答案,但对你的问题简短的回答是不可能的。
首先你应该了解环境变量是如何工作的。 在注册表中有一些地方像HKEY_LOCAL_MACHInesYstemCurrentControlSetControlSession ManagerEnvironment和HKEY_CURRENT_USEREnvironment其中环境变量将被保留。 在启动时操作系统读取这个注册表项。 然后一个窗口进程创建另一个窗口进程。 父进程可以向客户进程提供任何一组环境变量。 如果父进程没有这样做,则子进程会继承父进程的环境变量。
能够更新正在运行的进程的WM_WININICHANGE或WM_SETTINGCHANGE消息的环境变量。 Windows应用程序可以解释此消息,并从注册表HKEY_LOCAL_MACHInesYstemCurrentControlSetControlSession ManagerEnvironment和HKEY_CURRENT_USEREnvironment重新读取当前的环境变量。 因此,您通常可以在HKEY_LOCAL_MACHInesYstemCurrentControlSetControlSession ManagerEnvironment或HKEY_CURRENT_USEREnvironment下更改注册表值并发送
SendMessage (HWND_broADCAST,WM_SETTINGCHANGE,(LParaM)"Environment");
使用SendMessageTimeout而不是SendMessage会更好,但这个想法将保持不变。 问题在于其他进程不能等待这个消息并做一些事情。 大多数控制台应用程序没有消息循环,如果发送这样的消息,则不做任何事情。
因此,重要的是要明白, 没有简单的方法来更新所有进程的环境变量而无需重新启动计算机。 你应该对此有一个清楚的理解,稍微减少你的问题。
如果您更新注册表中的环境并发送SendMessage (HWND_broADCAST,(LParaM)"Environment")则由Explorer.exe创建的新处理将具有新的环境变量,但cmd.exe不会执行此操作。
如果要更新批处理中当前cmd.exe的环境变量,可以执行以下操作:可以在%TEMP%目录中创建一个新的CMD文件,例如t.cmd,写入文件SET PATH=%PATH%;C:BlaBla然后使用call %TEMP%t.cmd和dell %TEMP%t.cmd来更新当前cmd.exe的环境变量。
确切地说,有更多的地方用于构建新创建的进程的环境变量。 这是HKEY_LOCAL_MACHInesOFTWAREMicrosoftwindowsCurrentVersionApp Paths和%systemRoot%system32autoexec.nt文件的子项。 一个用于由ShellExecute和ShellExecuteEx创建的进程(例如Explorer.exe),另一个用于控制台应用程序。
如果你只关心新的流程实例,并且确实希望通过批处理文件来完成,那么setx就是你正在寻找的。
/M将更改HKEY_LOCAL_MACHINE的PATH而不是HKEY_CURRENT_USER 。
即系统变量,而不是用户的。
例如: SETX /M PATH "%PATH%;C:your path with spaces"
如果你想直接改变当前正在运行的进程的环境变量,那么,是的,这很复杂, 显然不推荐 :
Altering the environment variables of a child process during process creation is the only way one process can directly change the environment variables of another process. A process can never directly change the environment variables of another process that is not a child of that process.
否则,就像Oleg说的那样,通过编程,最好的方法是更改注册表并发送WM_SETTINGCHANGE并希望应用程序能够很好地将其提取出来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。