Inno Setup:在两个32bit / 64bit系统上都使用带有{pf}的“ Program Files”目录

Ben*_*ost 4 architecture windows installer inno-setup

常量{pf}是目录

C:\ Program档案

用于32位系统和

C:\ Program文件(x86)

适用于64位系统。

但是我想使用目录

C:\ Program档案

适用于32位和64位系统。我该如何实现?

Mar*_*ryl 5

使用如下脚本常量

[Setup]
DefaultDirName={code:GetProgramFiles}\My Program

[Code]

function GetProgramFiles(Param: string): string;
begin
  if IsWin64 then Result := ExpandConstant('{pf64}')
    else Result := ExpandConstant('{pf32}')
end;
Run Code Online (Sandbox Code Playgroud)

尽管仅应使用此方法,但要为运行中的各个平台生成二进制文件。就像您的情况一样,如果理解正确,则可以编译相应体系结构的Java二进制文件。


如果安装程序中有单独的32位和64位二进制文​​件,请使用如下脚本:

[Files]
Source: "MyDll32.dll"; DestDir: "{pf32}\My Program"; Check: not IsWin64
Source: "MyDll64.dll"; DestDir: "{pf64}\My Program"; Check: IsWin64
Run Code Online (Sandbox Code Playgroud)

也可以看看:


Air*_*irs 5

如果您为 64 位和 32 位安装使用单个安装程序,那么您应该使用ArchitecturesInstallIn64BitMode安装指令。这将在 64 位系统上安装时将 {pf} 和其他脚本常量更改为 64 位版本,在 32 位系统上安装时将其更改为 32 位版本。

您显然还想使用 Martin 示例中的 Check 来确保您只安装了正确的二进制文件。

前任:

#define MyAppName "MyAwesomeApp"
[Setup]
ArchitecturesInstallIn64BitMode=x64
AppName={#MyAppName}
DefaultDirname={pf}\{#MyAppName}

[Files]
Source: "MyApp_32bit.exe"; DestDir: "{app}"; Check not Is64BitinstallMode;
Source: "MyApp_64bit.exe"; DestDir: "{app}"; Check Is64BitinstallMode;
Run Code Online (Sandbox Code Playgroud)