通过批处理或Python永久更改用户的%PATH%环境变量

9
我一直在努力让我的用户手动设置PATH环境变量,但一直没有成功。我正在寻找一种自动设置的方法。最好是一个批处理文件,因为这将需要他们自己运行它(并警告他们正在做什么)。但是也可以在setup.py中进行添加。
其他信息:SET仅影响当前和派生shell;永久值似乎存储在注册表中(那是我不敢碰的地方)。
4个回答

6
所以,由于我一直难以让用户手动设置PATH,我正在寻找一种自动化的方法。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths(以及HKEY_CURRENT_USER\...)注册表键允许您将应用程序特定路径附加到可执行文件名称上。
每当启动给定名称的可执行文件时,应用程序特定路径会添加到该可执行文件的PATH环境变量中。

5

正如David所说,您可以从Windows资源工具包中获取SETX工具。

然而,我发现SETX有时会出现问题(例如崩溃)。我还没有找出确切的问题所在,但我怀疑这是一个大小问题(例如,如果您尝试将变量(在我的情况下是PATH)设置为太大的值,例如>1024个奇怪字符)。

我发现另外两个可执行文件可以完成同样的任务。我特别喜欢CodeProject上Jonathan“Darka”Wilkes的SetEnv。他使其非常有用,具有良好的功能,并且与所有Windows系统兼容——我还提出了一些功能建议。 :)

另一个选择是手动完成(实际上将项目添加到注册表中,然后广播 WM_SETTINGCHANGE 到顶级窗口,或重新启动shell /重新启动)。但是我认为在批处理文件中使用SetEnv是最好的选择。 ;)


你仍然需要让他们安装SetEnv,但这是一个相对轻松的过程。这似乎是我处理它的方式。 - Xiong Chiamiov
其实你不需要安装SetEnv,只需将可执行文件放在与批处理文件相同的目录中即可进行设置。 - Synetech
我终于开始处理这个问题了。在 wine 中安装了 SetEnv,取出可执行文件并将其放入我的程序目录中,编写了一个批处理文件来使用它,一切都很顺利。 - Xiong Chiamiov

3
我刚刚遇到这个问题,但是我不喜欢任何可用的选项,所以我决定编写自己的解决方案。
(SetEnv本来不错,但我不喜欢非自由许可证,而且我总是更喜欢不必调用子进程……如果必须调用SetEnv作为子进程,但根据维基百科,它使用的许可证是非自由的,因为它有一些“不作恶”的条款,这种法律上模糊的限制在我看来总是一个定时炸弹。)
这里有一个小的MIT许可证Python类,可以隐藏修改注册表直接发送WM_SETTINGCHANGE的工作。(适用于setup.py中的使用)

2

来自这个网站

Using the add-on tool Setx.exe

It is not part of the standard Windows XP setup but a command-line tool called setx.exe is included in the Windows XP Service Pack 2 Support Tools. This tool extends the set command so that permanent changes in the environment variables can be made. For example, to add a folder C:\New Folder to the path, the command would be

setx path "%PATH%;C:\New Folder"
这听起来可以满足你想要做的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接