Inno Setup卸载时无法删除{tmp}临时文件夹报错145如何解决
问题产生原因
错误码145对应Windows系统错误ERROR_DIR_NOT_EMPTY(目录非空无法删除),你的配置不生效有两个核心问题:
- 常量用错了
{tmp}是Inno Setup专属常量,指向安装/卸载程序启动时,自身在系统临时目录下生成的随机命名的临时工作目录,专门用来存放安装卸载过程自身需要的临时文件,不是你应用运行时读写的系统TEMP目录。你写的{tmp}\MyTempFolder根本匹配不到应用运行时创建的那个MyTempFolder路径。 - 占用问题
就算你真的在Inno自身的{tmp}目录下创建了MyTempFolder,当卸载流程执行到[UninstallDelete]段时,卸载程序本身还在运行,正占用着{tmp}目录下的自身运行文件,这时候删除该路径下的内容自然会因为文件锁定、目录非空失败。而且这个{tmp}目录本身就会在卸载流程结束后被Inno自动清理,完全不需要手动写规则删除。
正确实现方式
- 替换为正确的路径常量:如果你的应用是在系统临时目录下创建的MyTempFolder,把
{tmp}替换为{%TEMP},这个常量才对应系统环境变量%TEMP%指向的用户通用临时目录,同时加上recursesubdirs标记确保递归删除所有子内容,配置如下:
[UninstallDelete] Type: filesandordirs; Name: "{%TEMP}\MyTempFolder"; Flags: recursesubdirs
- 如果你的MyTempFolder不是存在系统临时目录,而是存在其他路径(比如用户数据目录、安装目录下),将Name字段替换为实际对应的路径即可,比如存在用户应用数据目录就写
{userappdata}\你的应用名称\MyTempFolder。 - 如果调整路径后仍然提示删除失败,先检查卸载时是否还有你的应用相关进程在后台运行、占用着目标文件夹里的文件,需要提前在卸载流程开头终止关联进程,再执行删除操作。
内容的提问来源于stack exchange,提问作者Fabii02
相关产品推荐
相关产品推荐

