Python开发卸载工具时无法删除exe所在当前工作目录问题
卸载工具删除自身工作目录解决方案
问题根因
- 运行中的exe会持有当前工作目录的系统句柄,直接执行删除命令时,目录被锁定,无法删除根节点
- 之前的拆分命令没有先脱离目标工作目录,导致删除目录根节点时被系统拦截
修复后的代码
import subprocess import os from sys import argv # 先将当前进程的工作目录切换到系统临时目录,解除对目标目录的锁定 os.chdir(os.getenv("TEMP")) # 组合命令:等待2秒 -> 删除exe自身 -> 递归删除原工作目录 subprocess.Popen( f'WAITFOR /T 2 PAUSE 2>NUL & DEL /F "{argv[0]}" & RD /Q /S "{os.getcwd()}"', shell=True, creationflags=0x00000008 )
注意事项
- 如果原工作目录内有其他正在运行的进程、或被其他软件打开的文件,目录仍然会删除失败,卸载逻辑需要提前确保目录内所有资源已被释放
- 代码中保留路径外层的引号即可,兼容带空格的目录路径
内容的提问来源于stack exchange,提问作者Gregory leyda
相关产品推荐
相关产品推荐

