You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inno Setup卸载器如何删除安装时用户指定的文件夹?

解决Inno Setup卸载时删除指定自定义路径的问题

你遇到的问题核心是:[UninstallDelete]段无法直接引用脚本变量或动态读取的INI配置,它只能处理固定常量或预定义路径。要实现卸载时删除用户指定的DataPath,得用代码动态读取配置并执行删除操作,具体步骤如下:

一、移除无效的[UninstallDelete]配置

先删掉你之前加的这段无效配置:

[UninstallDelete]
Type: filesandordirs; Name: DataPath

二、添加卸载时的自定义处理代码

在脚本的[Code]段中,通过卸载事件触发路径读取和删除操作。以下是完整的代码实现,我会标注关键细节:

procedure CurUninstallStepChanged(CurStep: TUninstallStep);
var
  ConfigPath: String;
  DataPath: String;
begin
  // 选择在卸载核心步骤(usUninstall)执行删除,确保时机正确
  if CurStep = usUninstall then
  begin
    // 1. 获取config.ini的绝对路径
    ConfigPath := ExpandConstant('{app}\config.ini');
    
    // 2. 从INI中读取用户指定的datapath
    // 注意:这里的Section名称要和你[INI]段里的完全一致(包括空格和等号)
    DataPath := GetIniString('connection = standard', 'datapath', '', ConfigPath);
    
    // 3. 处理路径:如果是相对路径,转换为基于{app}的绝对路径
    if DataPath <> '' then
    begin
      if not IsAbsolutePath(DataPath) then
      begin
        DataPath := AddBackslash(ExpandConstant('{app}')) + DataPath;
      end;
      // 标准化路径,避免重复斜杠或格式问题
      DataPath := ExpandConstant(DataPath);
      
      // 4. 确认路径存在后,删除整个目录及所有内容
      if DirExists(DataPath) then
      begin
        // DelTree参数说明:
        // 参数1:目标路径;参数2:允许删除非空目录;参数3:删除目录本身;参数4:显示删除进度
        DelTree(DataPath, True, True, True);
      end;
    end;
  end;
end;

三、关键细节说明

  1. Section名称匹配:你的[INI]段中Section写的是"connection = standard",所以读取时必须完全一致,不能写错。如果是配置时的笔误(比如应该是Section为"connection"、Key为"standard"),记得同步修改GetIniString的前两个参数。
  2. 相对路径处理:如果用户输入的是相对路径(比如./data),代码会自动将其转换为基于{app}的绝对路径,避免删除错误的位置。
  3. 安全校验:先判断路径非空且存在,再执行删除操作,避免因配置缺失或路径不存在导致的报错。

内容的提问来源于stack exchange,提问作者tg24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:02:53