Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1265
Благодарности: 1025

Профиль | Отправить PM | Цитировать


R.i.m.s.k.y., ну тогда слушай теорию, повторять не буду. 64-битная система помимо нативных (родных, своих в доску, etc) 64-битных файлов имеет набор 32-битных файлов для поддержки запуска 32-битных программ через подсистему WOW64, не позволяющей обращаться 32-битному коду к 64-битным файлам и реестру. Грубо говоря, 64-битные программы работают с родными файлами из С:\Windows\system32 и родным реестром (напр. куст HKLM\SOFTWARE), а 32-битные со своим 32-битным набором из С:\Windows\SysWoW64 и своим 32-битным реестром в составе 64-битного (напр. куст HKLM\SOFTWARE\Wow6432Node). Программные группы тоже различаются: Program Files для 64-битных программ, Program Files (x86) для 32-битных. Inno, как и любое другое 32-битное приложение, при обращении к С:\Windows\system32 или к HKLM\SOFTWARE\MyProgram будет перенаправлено подсистемой WOW64 в соответстующие папку SysWoW64 и куст Wow6432Node, {sys} становится С:\Windows\SysWoW64, {pf} - C:\Program Files (x86), HKLM\SOFTWARE - HKLM\SOFTWARE\Wow6432Node и т.д. Если же установщик помимо 32-битных компонентов содержит 64-битные, то нужно позаботиться о том, чтобы неродные для 32-битной программы 64-битные файлы не попали куда не надо (флаг 64bit (для секций Files, Run и UninstallRun), функции IsWin64, EnableFsRedirection и т.д., префикс 64 для параметра Root секции Registry и т.д.).
Код: Выделить весь код
[Run]
;64-bit mode OFF
Filename: {sys}\calc.exe; WorkingDir: {sys} - запустит калькулятор из С:\Windows\SysWoW64
Filename: {sys}\calc.exe; WorkingDir: {sys}; Flags: 64bit - запустит калькулятор из С:\Windows\system32

[Registry]
;64-bit mode OFF
Root: HKLM; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey - запись в HKLM\SOFTWARE\Wow6432Node\MyProgram
Root: HKLM64; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey -  запись в HKLM\SOFTWARE\MyProgram
Теперь о директиве ArchitecturesInstallIn64BitMode. Установка ее значения в x64 и/или ia64 позволяет подсистеме WOW64 выполнять 32-битный код в 64-битном режиме путем переключения собственного режима процессора. Другими словами установщик не становится 64-битным приложением, это невозможно, просто теперь редирект не нужен, дефолтными стают теперь 64-битные папки и кусты, отпадает необходимость в указании флага 64bit или префикса 64, но появляется необходимость использования при обращении к 32-битным папкам и реестру флага 32bit, спецконстант типа {syswow64}, {pf32} и т.д., префикса 32. Поэтому включение режима целесообразно, если устанавливаемые компоненты сплошь 64-битные или их больше, чем 32-битных - меньше писанины. Т.к. 32-битных программ гораздо больше, чем "чистых" 64-битных, то на практике включение режима 64-bit mode встретишь нечасто. Лично я ни разу не применял.
Код: Выделить весь код
[Run]
;64-bit mode ON
Filename: {sys}\calc.exe; WorkingDir: {sys} - запустит калькулятор из С:\Windows\system32
Filename: {sys}\calc.exe; WorkingDir: {sys}; Flags: 32bit - запустит калькулятор из С:\Windows\SysWoW64
Filename: {syswow64}\calc.exe; WorkingDir: {syswow64} - запустит калькулятор из С:\Windows\SysWoW64, не рекомендуется

[Registry]
;64-bit mode ON
Root: HKLM; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey - запись в HKLM\SOFTWARE\MyProgram
Root: HKLM32; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey -  запись в HKLM\SOFTWARE\Wow6432Node\MyProgram
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 23-10-2012 | #1177