Windows注册表自启动Python程序时出现[Errno13]权限拒绝问题
问题原因及解决方案
核心原因
通过Windows注册表设置自启动时,程序的默认工作目录并非程序所在文件夹,而是系统目录(如C:\Windows\System32)。你用相对路径'save.macros'打开文件时,程序会尝试在系统目录下查找该文件——要么文件不存在,要么系统目录的权限限制导致无法读取,从而触发[Errno 13] Permission denied。而手动双击启动程序时,Windows会自动将程序所在目录设为工作目录,所以相对路径能正常找到文件。
解决方案
方案1:在代码中使用绝对路径(推荐)
修改代码,先获取程序自身的绝对路径,再拼接目标文件的路径,彻底避免工作目录的影响:
import os # 获取当前程序所在的目录 program_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接目标文件的完整路径 file_path = os.path.join(program_dir, 'save.macros') with open(file_path, mode='rb') as f: # 执行你的文件操作逻辑 pass
方案2:修改注册表启动项,指定工作目录
如果不想修改代码,可以修改注册表中的自启动命令,通过cmd先切换到程序所在目录再启动程序:
- 打开注册表编辑器(
regedit),找到自启动项位置:- 当前用户:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run - 所有用户:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
- 当前用户:
- 修改对应启动项的数值数据,格式为:
例如:cmd /c "cd /d "C:\你的程序完整目录" && 你的程序文件名.exe"cmd /c "cd /d "D:\MyApp" && my_program.exe"
内容的提问来源于stack exchange,提问作者Liveside
相关产品推荐
相关产品推荐

