You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Inno Setup卸载器自定义页面添加可选删除文件复选框实现

解决Inno Setup卸载器复选框关联删除特定文件的问题

没问题,我来帮你把这个复选框和删除操作关联起来,分两步就能搞定:

1. 把复选框变量声明为全局变量

首先,你得确保NewCheckBox1全局变量,不然在后续的卸载事件里访问不到它。在[Code]段最顶部添加变量声明:

var
  UninstallfirstPage: TWizardPage; // 你已经定义的卸载自定义页面
  NewCheckBox1: TNewCheckBox;       // 把复选框变量提到全局

2. 在卸载过程中判断复选框状态并执行删除

接下来,利用Inno Setup的CurUninstallStepChanged事件,在正式开始卸载的时候检查复选框是否被勾选,如果是就删除目标文件/文件夹。

添加下面的代码到[Code]段:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  TargetPath: string;
begin
  // 当卸载进入实际卸载步骤时触发
  if CurUninstallStep = usUninstall then
  begin
    // 检查复选框是否被用户勾选
    if NewCheckBox1.Checked then
    begin
      // 替换成你要删除的文件或文件夹路径
      // 示例1:删除安装目录下的saves文件夹
      TargetPath := ExpandConstant('{app}\saves');
      // 示例2:删除用户文档里的游戏存档
      // TargetPath := ExpandConstant('{userdocs}\MyGame\Saves');
      
      // 如果是文件夹,用DelTree删除整个目录(包括子文件/文件夹)
      if DirExists(TargetPath) then
      begin
        DelTree(TargetPath, True, True, True);
        Log('已删除目标路径: ' + TargetPath); // 日志记录,方便调试
      end;
      
      // 如果是单个文件,用DeleteFile函数
      // if FileExists(TargetPath) then
      // begin
      //   DeleteFile(TargetPath);
      //   Log('已删除目标文件: ' + TargetPath);
      // end;
    end;
  end;
end;

关键注意点:

  • 路径正确性:用ExpandConstant处理Inno的内置常量(比如{app}{userdocs}),避免硬编码路径导致的兼容性问题。
  • 权限:如果要删除的路径需要管理员权限,确保卸载器以管理员身份运行(可以在[Setup]段设置PrivilegesRequired=admin)。
  • 调试:可以用Log函数输出日志,在卸载时打开调试模式(/log=uninstall.log)查看执行情况。

这样一来,当用户在卸载前的自定义页面勾选复选框后,卸载程序就会自动删除你指定的文件或文件夹啦!

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

火山引擎 最新活动