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

如何让Inno Setup按指定路径操作System32/SysWow64文件夹

解决Inno Setup中System32/SysWow64路径重定向问题,实现Windows计算器替换与还原

我完全懂你的 frustration——Windows 的文件系统重定向机制简直是个"隐形推手",32位程序碰System32就自动转去SysWow64,哪怕写死绝对路径都没用。下面是一套精准控路的方案,完美适配你的需求:替换Win10计算器为Win7版本、权限修改、卸载还原,全程严格指向64位System32文件夹。

核心破局点:关闭重定向+启用64位安装模式

Inno Setup默认是32位程序,天生会被Windows的文件系统重定向影响。要彻底解决,得从两个层面下手:

1. 强制以64位模式运行安装包

在脚本的[Setup]段加以下配置,让安装程序在64位系统上以64位进程启动,此时{sys}就直接指向真正的C:\Windows\System32:

[Setup]
; 仅在x64系统上启用64位安装模式
ArchitecturesInstallIn64BitMode=x64
; 必须要求管理员权限,否则碰不了系统文件
PrivilegesRequired=admin
; 强制禁用文件系统重定向(64位模式下默认已禁用,但加上更保险)
DisableFsRedirection=yes

2. 手动控重定向(针对自定义脚本/命令)

如果你的脚本里有自定义Pascal代码或外部命令,偶尔还是出现重定向"漏网",可以手动在操作前后开关重定向:

procedure CurStepChanged(CurStep: TSetupStep);
var
  OldState: Boolean;
begin
  if CurStep = ssInstall then
  begin
    // 先禁用重定向
    OldState := DisableFsRedirection;
    try
      // 在这里执行你的System32文件操作,比如复制、改权限
      FileCopy(ExpandConstant('{src}\calc_win7.exe'), ExpandConstant('{sys}\calc.exe'), False);
    finally
      // 操作完恢复原重定向状态
      EnableFsRedirection(OldState);
    end;
  end;
end;

完整实现流程(计算器替换+权限+卸载还原)

步骤1:先备份原Win10计算器

安装前把原calc.exe存到安装目录,方便卸载时还原:

[Files]
; 备份System32下的原计算器到{app}备份文件夹
Source: "{sys}\calc.exe"; DestDir: "{app}\backup"; Flags: external skipifsourcedoesntexist
; 把Win7版本计算器放到临时目录备用
Source: "calc_win7.exe"; DestDir: "{tmp}"; Flags: dontcopy

步骤2:替换计算器并修改权限

用[Run]段执行命令替换文件,同时设置普通用户能运行的权限:

[Run]
; 替换System32下的计算器(64位模式下{sys}就是真正的System32)
Filename: "cmd.exe"; Parameters: "/c copy /y ""{tmp}\calc_win7.exe"" ""{sys}\calc.exe"""; Flags: runhidden
; 给替换后的计算器加全用户执行权限
Filename: "icacls.exe"; Parameters: """{sys}\calc.exe"" /grant Everyone:F"; Flags: runhidden

步骤3:卸载时还原原计算器

在[UninstallRun]段把备份的原文件复制回去,恢复系统默认状态:

[UninstallRun]
; 把备份的原计算器还原回System32
Filename: "cmd.exe"; Parameters: "/c copy /y ""{app}\backup\calc.exe"" ""{sys}\calc.exe"""; Flags: runhidden
; 恢复原文件权限(可选,根据实际需求调整)
Filename: "icacls.exe"; Parameters: """{sys}\calc.exe"" /reset"; Flags: runhidden

踩坑提醒

  • 确保你用的Win7版本calc.exe是64位的,不然替换后64位系统可能跑不起来。
  • 测试时一定要右键"以管理员身份运行"安装包,哪怕你是管理员账户,UAC会拦系统文件修改。
  • 建议用最新版Inno Setup 6.x,老版本对64位模式的支持可能有bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:08:29