通过 Inno Setup {pf} 在 32 位/64 位系统上使用“Program Files”目录

问题描述 投票:0回答:2

常量

{pf}

的目录
C:\Program Files

适用于 32 位系统和

C:\Program Files (x86)

适用于 64 位系统。

但是我想使用目录

C:\Program Files

适用于 32 位和 64 位系统。我怎样才能实现这个目标?

windows installation inno-setup 32bit-64bit
2个回答
15
投票

使用脚本常量,例如:

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

function GetProgramFiles(Param: string): string;
begin
  if IsWin64 then Result := ExpandConstant('{commonpf64}')
    else Result := ExpandConstant('{commonpf32}')
end;

尽管只有在为相应平台动态生成二进制文件时才应使用此方法。就像您的情况一样,如果理解正确,您可以为相应的架构编译 Java 二进制文件。


您还可以使用64位安装模式

然后你可以简单地使用

{autopf}
常量(以前的
{pf}
):

[Setup]
DefaultDirName={autopf}\My Program

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

[Files]
Source: "MyDll32.dll"; DestDir: "{pf32}\My Program"; Check: not IsWin64
Source: "MyDll64.dll"; DestDir: "{pf64}\My Program"; Check: IsWin64

另请参阅:


7
投票

如果您使用单个安装程序进行 64 位和 32 位安装,那么您应该使用

ArchitecturesInstallIn64BitMode
安装指令。在 64 位系统上安装时,这会将 {pf} 和其他脚本常量更改为其 64 位版本,在 32 位系统上安装时将其更改为 32 位版本。

您显然还想使用马丁示例中的检查来确保您只安装正确的二进制文件。

例如:

#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;
© www.soinside.com 2019 - 2024. All rights reserved.