python脚本修改windows环境变量后立即生效
时间: 2023-07-28 21:49:31 浏览: 195
在 Windows 操作系统中,修改环境变量后需要重新打开命令行窗口或者重新启动计算机才能使修改生效。如果想要在 Python 脚本中实现修改环境变量后立即生效的功能,可以使用以下方法:
1. 使用 `os.environ` 对象修改环境变量,并且使用 `ctypes` 模块调用 `SendMessage` API 发送消息给 Windows Explorer 进程,通知它更新环境变量。示例代码如下:
```
import os
import ctypes
# 修改环境变量 PATH
new_path = os.environ['PATH'] + ';C:\\NewFolder'
os.environ['PATH'] = new_path
# 发送消息给 Windows Explorer 进程,通知它更新环境变量
HWND_BROADCAST = 0xFFFF
WM_SETTINGCHANGE = 0x1A
SMTO_ABORTIFHUNG = 0x0002
result = ctypes.windll.user32.SendMessageTimeoutW(
HWND_BROADCAST,
WM_SETTINGCHANGE,
0,
'Environment',
SMTO_ABORTIFHUNG,
5000,
None
)
if result == 0:
print('Failed to update environment variables')
else:
print('Environment variables updated successfully')
```
在代码中,首先使用 `os.environ` 对象修改环境变量 PATH,然后使用 `ctypes` 模块调用 `SendMessage` API 发送消息给 Windows Explorer 进程,通知它更新环境变量。如果更新成功,`SendMessage` API 将返回一个非零值,否则返回零。
2. 使用 `winreg` 模块修改系统注册表中的环境变量,并且使用 `win32api` 模块调用 `SendMessage` API 发送消息给 Windows Explorer 进程,通知它更新环境变量。示例代码如下:
```
import winreg
import win32api
# 修改环境变量 PATH
with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as hkey:
with winreg.OpenKeyEx(hkey, r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 0, winreg.KEY_WRITE) as key:
new_path = winreg.QueryValueEx(key, 'PATH')[0] + ';C:\\NewFolder'
winreg.SetValueEx(key, 'PATH', 0, winreg.REG_EXPAND_SZ, new_path)
# 发送消息给 Windows Explorer 进程,通知它更新环境变量
HWND_BROADCAST = 0xFFFF
WM_SETTINGCHANGE = 0x1A
SMTO_ABORTIFHUNG = 0x0002
result = win32api.SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 'Environment', SMTO_ABORTIFHUNG, 5000)
if result == 0:
print('Failed to update environment variables')
else:
print('Environment variables updated successfully')
```
在代码中,首先使用 `winreg` 模块修改系统注册表中的环境变量 PATH,然后使用 `win32api` 模块调用 `SendMessage` API 发送消息给 Windows Explorer 进程,通知它更新环境变量。如果更新成功,`SendMessage` API 将返回一个非零值,否则返回零。