【问题标题】:Use both 32-bit and 64-bit version of rundll32.exe in Inno Setup在 Inno Setup 中同时使用 32 位和 64 位版本的 rundll32.exe
【发布时间】:2020-03-09 03:59:54
【问题描述】:

我想将批处理文件中的这两行转换为 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

【问题讨论】:

  • 那么,真正的问题是什么?区分 32 位和 64 位?

标签: inno-setup


【解决方案1】:

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

[Setup]
ArchitecturesInstallIn64BitMode=x64 

在 32 位安装模式下,Inno Setup 作为 32 位应用程序,在尝试访问 C:\Windows\System32 时将被重定向到 C:\WINDOWS\SysWOW64。如此有效,sys 和 syswow64 都映射到同一个 [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;

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 2011-06-17
    • 2015-09-21
    • 1970-01-01
    • 2015-07-20
    • 2011-06-09
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多