Вопрос Как сделать в инсталляторе выбор между x86 и x64 Windows для размещения файлов в разные папки?

Wizard1102

Мимокрокодил
Здравствуйте?
Как сделать в инсталляторе выбор между x86 и x64 Windows?
Задача: при запуске инсталлятора он определяет разрядность Windows и в зависимости от разрядности устанавливает файлы либо в \Windows\System32\ для Windows x86, либо в Windows\SysWOW64\ для Windows x64. Названия файлов одни и те же для обоих версий Windows.
У инсталлятора отсутствует исполняемый файл - он только размещает несколько одних и тех же файлов либо в одну папку, либо в другую в зависимости от разрядности Windows.

Если сделать так, то для Windows x64 устанавливается в Windows\SysWOW64\, а для Windows x86 не устанавливается в Windows\System32\:
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{94DD49E1-244C-4BBD-B353-E744AEFAC02E}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=C:\Install_N
DisableDirPage=yes
DefaultGroupName={#MyAppName}
InfoBeforeFile=D:\ReadMe.txt
OutputDir=D:\Install_x64
OutputBaseFilename=Install_x64
Compression=lzma
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "..\INSTALL_N\indy.bpl"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\rtl.bpl"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\vcl.bpl"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\borlnd.dll"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\ccmt.dll"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\HID_Lib.dll"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\Files.zip"; DestDir: "{app}"
Source: "..\INSTALL_N\ReadMe.txt"; DestDir: "{app}"
 
Последнее редактирование:

JEKE24

Новичок
Для этого можно использовать встроенные функции Inno Setup, такие как IsWin64, чтобы проверить, выполняется ли установка на 64-разрядной системе. В зависимости от результата этой проверки файлы будут копироваться в соответствующие папки: \Windows\System32 для x86 и \Windows\SysWOW64 для x64.

Source: "..\INSTALL_N\indy.bpl"; DestDir: "{syswow64}"; Check: IsWin64
Source: "..\INSTALL_N\indy.bpl"; DestDir: "{sys}"; Check: not IsWin64
 

Wizard1102

Мимокрокодил
@JEKE24, @Хамик, спасибо.
Всё получилось.

Если теперь сделать так, то для Windows x64 нужные файлы устанавливаются в Windows\SysWOW64\ и в Windows\System32\, а для Windows x86 устанавливаются в Windows\System32\:

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{94DD49E1-244C-4BBD-B353-E744AEFAC02E}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=C:\Install_N
DisableDirPage=yes
DefaultGroupName={#MyAppName}
InfoBeforeFile=D:\ReadMe.txt
OutputDir=D:\Install_x86_x64
OutputBaseFilename=Install_x86_x64
Compression=lzma
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "..\INSTALL_N\indy.bpl"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\indy.bpl"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: not IsWin64
Source: "..\INSTALL_N\rtl.bpl"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\rtl.bpl"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: not IsWin64
Source: "..\INSTALL_N\vcl.bpl"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\vcl.bpl"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: not IsWin64
Source: "..\INSTALL_N\borlnd.dll"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\borlnd.dll"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: not IsWin64
Source: "..\INSTALL_N\ccmt.dll"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\ccmt.dll"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: not IsWin64
Source: "..\INSTALL_N\HID_Lib.dll"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
Source: "..\INSTALL_N\HID_Lib.dll"; DestDir: "{sys}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: not IsWin64
Source: "..\INSTALL_N\Files.zip"; DestDir: "{app}"
Source: "..\INSTALL_N\ReadMe.txt"; DestDir: "{app}"

А это и было так задумано при создании данного инсталлятора. Задача выполнена, цель достигнута. Ура, товарищи! :yahoo:
 
Последнее редактирование:

Wizard1102

Мимокрокодил
Дополнение к сообщению.
Для того, чтобы 32-битные файлы записывались для Windows x64 в папку Windows\SysWOW64\, желательно для файла установить Flags: 32bit. Иначе не будет запись 32-битных файлов в данный системный каталог. Для 64-битных файлов запись в этот каталог в порядке.
В примере файл rtl.bpl является 32-разрядным или 32-битным. Как-то так...😉
[Setup]
ArchitecturesInstallIn64BitMode=x64
[Files]
Source: "..\INSTALL_N\rtl.bpl"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit; Permissions: admins-full; Check: IsWin64
 
Сверху