在Inno Setup中使用32位和64位版本的rundll32.exe

时间:2018-03-25 06:57:27

标签: inno-setup

我想将批处理文件中的两行转换为Inno Setup [Run]部分:

%windir%\SysWOW64\rundll32.exe "%~dp0my32.dll",RegDll
%windir%\system32\rundll32.exe "%~dp0my64.dll",RegDll

所以我想要这样的东西(但有效):

[Run]
Filename: "{sys}\rundll32.exe"; Parameters: ""{code:GetDir|0}\my64.dll",RegDll"; WorkingDir: "{code:GetDir|0}"; StatusMsg: "Registering Module..."; MinVersion: 0.0,5.0; Flags: runhidden runascurrentuser
Filename: "{syswow64}\rundll32.exe"; Parameters: ""{code:GetDir|0}\my32.dll",RegDll"; WorkingDir: "{code:GetDir|0}"; StatusMsg: "Registering Module..."; MinVersion: 0.0,5.0; Flags: runhidden runascurrentuser

1 个答案:

答案 0 :(得分:1)

您的代码在64-bit install mode中是正确的,即如果您设置了ArchitecturesInstallIn64BitMode

[Setup]
ArchitecturesInstallIn64BitMode=x64 

在32位安装模式下,Inno Setup(32位应用程序)在尝试访问C:\WINDOWS\SysWOW64时将被重定向到C:\Windows\System32。如此有效,syssyswow64都映射到相同的[32位]文件夹(C:\WINDOWS\SysWOW64)。

您可以使用64bit flag覆盖(如果您不想切换到64位安装模式):

[Run]
Filename: "{sys}\rundll32.exe"; Parameters: """{code:GetDir|0}\my64.dll"",RegDll"; \
    WorkingDir: "{code:GetDir|0}"; StatusMsg: "Registering Module..."; \
    MinVersion: 0.0,5.0; Flags: runhidden runascurrentuser; Flags: 64bit;
Filename: "{sys}\rundll32.exe"; Parameters: """{code:GetDir|0}\my32.dll"",RegDll"; \
    WorkingDir: "{code:GetDir|0}"; StatusMsg: "Registering Module..."; \
    MinVersion: 0.0,5.0; Flags: runhidden runascurrentuser; Flags: 32bit;