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

如何将批处理中注册32/64位DLL的命令转为Inno Setup的[Run]段

正确的Inno Setup [Run]段写法

首先得理清Inno Setup里的位数相关常量和执行逻辑,你之前的写法主要问题在于引号转义不对,以及没有正确区分32/64位系统下的rundll32路径。以下是两种常见场景的正确写法:

场景1:32位安装程序(默认情况,兼容32/64位系统)

这是最通用的情况,能同时在32位和64位系统上完成对应DLL的注册:

[Run]
; 注册32位DLL:所有系统通用,{sys}在32位系统指向System32,在64位系统指向SysWOW64(32位系统目录)
Filename: "{sys}\rundll32.exe"; Parameters: """{app}\my32.dll"",RegDll"; StatusMsg: "Registering 32-bit module..."; Flags: runhidden runascurrentuser
; 注册64位DLL:仅在64位系统执行,{sysnative}指向64位系统的System32目录(32位安装程序需用这个常量访问64位系统文件)
Filename: "{sysnative}\rundll32.exe"; Parameters: """{app}\my64.dll"",RegDll"; StatusMsg: "Registering 64-bit module..."; Flags: runhidden runascurrentuser 64bit; Check: IsWin64

场景2:64位专属安装程序(仅在64位系统运行)

如果你已经设置了ArchitecturesInstallIn64BitMode=x64,让安装程序只在64位系统运行,写法可以简化:

[Run]
; 注册32位DLL:用SysWOW64目录下的32位rundll32
Filename: "{syswow64}\rundll32.exe"; Parameters: """{app}\my32.dll"",RegDll"; StatusMsg: "Registering 32-bit module..."; Flags: runhidden runascurrentuser
; 注册64位DLL:用System32目录下的64位rundll32
Filename: "{sys}\rundll32.exe"; Parameters: """{app}\my64.dll"",RegDll"; StatusMsg: "Registering 64-bit module..."; Flags: runhidden runascurrentuser

关键注意点:

  • 引号转义:Inno Setup里需要用两个双引号""来表示一个实际的双引号,所以参数里的路径要写成"""路径"""的格式,确保rundll32能正确识别带空格的路径。
  • 常量区分:32位安装程序在64位系统中,{sys}会被映射到32位系统目录(SysWOW64),如果要访问64位系统文件必须用{sysnative};64位安装程序则直接用{sys}指向64位系统目录,{syswow64}指向32位系统目录。
  • 条件判断:注册64位DLL时,通过Check: IsWin64确保只在64位系统执行,避免32位系统出现找不到文件的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:32