Inno Setup: используйте каталог «Program Files» в обеих 32-битных / 64-битных системах с {pf}

windows architecture installer inno-setup

2790 просмотра

2 ответа

81 Репутация автора

Константа {pf} является каталогом

C: \ Program Files

для 32-битных систем и

C: \ Program Files (x86)

для 64-битных систем.

Однако я хочу использовать каталог

C: \ Program Files

для 32- и 64-битных систем. Как мне этого добиться?

Автор: Ben Jost Источник Размещён: 18.07.2016 06:31

Ответы (2)


5 плюса

105574 Репутация автора

Решение

Используйте скриптовую константу, например:

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

[Code]

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

Хотя этот подход следует использовать, только если вы генерируете двоичные файлы для соответствующей платформы на лету. Как и в вашем случае, если вы правильно понимаете, вы компилируете двоичные файлы Java для соответствующей архитектуры.


Если у вас есть отдельные 32-битные и 64-битные двоичные файлы в установщике, используйте такой скрипт:

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

Смотрите также:

Автор: Martin Prikryl Размещён: 19.07.2016 08:01

1 плюс

692 Репутация автора

Если вы используете один и тот же установщик для 64- и 32-разрядных установок, вам следует использовать ArchitecturesInstallIn64BitModeдирективу установки. Это изменит {pf} и другие скриптовые константы на их 64-битную версию при установке в 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;
Автор: Airs Размещён: 25.07.2017 12:53
Вопросы из категории :
32x32