Секция [Registry]

Эта секция является необязательной и определяет какие-либо ключи/значения реестра Windows, которые программа установки должна создать, изменить или удалить на системе пользователя.

По умолчанию ключи и значения реестра, созданные программой установки, не удаляются во время деинсталляции приложения. Если необходимо, чтобы деинсталлятор выполнял их удаление, используйте флаг uninsdelete*, который описывается ниже.

Ниже представлен пример секции [Registry].

[Registry]
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"

Ниже приведен список поддерживаемых параметров:

Root  (обязательный)

Определяет имя корневого раздела реестра. Допустимые значения:

HKCU (HKEY_CURRENT_USER)
HKLM (HKEY_LOCAL_MACHINE)
HKCR (HKEY_CLASSES_ROOT)
HKU (HKEY_USERS)
HKCC (HKEY_CURRENT_CONFIG)

Ещё одно специальное значение:

HKA режиме административной установки равен HKLM, иначе HKCU)

Значения HKCU и HKA следует использовать только для настроек, совместимых с перемещаемыми профилями.

Использовать HKCR не рекомендуется. Вместо него используйте HKA с параметром Subkey и значением "Software\Classes".

Значения (включая HKA) могут иметь суффикс 32 или 64. Имена разделов с суффиксом 32 (например, HKLM32) сопоставляются с 32-разрядным представлением реестра; имена разделов с суффиксом 64 (например, HKLM64) сопоставляются с 64-разрядным представлением реестра.

Имя раздела с суффиксом 64 можно использовать только при работе программы установки в 64-разрядной системе Windows, иначе произойдёт ошибка. При создании инсталлятора, поддерживающего обе архитектуры, 32-бит и 64-бит, ошибки можно избежать, добавив параметр Check: IsWin64, который приведет к тому, что при работе в 32-разрядной системе Windows данная запись будет пропущена.

Имя раздела без суффикса (например, HKLM) эквивалентно значению с суффиксом 32 (например, HKLM32), пока инсталлятор не работает в 64-разрядном режиме установки, иначе эквивалентно значению с суффиксом 64 (например, HKLM64).

Пример:
Root: HKLM
Subkey  (обязательный)

Определяет имя подраздела реестра; может содержать константы.

Пример:
Subkey: "Software\My Company\My Program"
ValueType

Определяет тип данных значения. Поддерживаются следующие типы данных:

none (по умолчанию) параметр реестра без значения.
В этом случае параметр ValueData игнорируется.
string строковое значение (REG_SZ).
expandsz расширяемое строковое значение (REG_EXPAND_SZ).
multisz многостроковое значение (REG_MULTI_SZ).
dword 32-разрядное числовое значение (REG_DWORD).
qword 64-разрядное числовое значение (REG_QWORD).
binary двоичное значение (REG_BINARY).
Пример:
ValueType: string
ValueName

Определяет имя параметра; может содержать константы. Если имя является пустой строкой, будет использоваться параметр с именем "Default".

Пример:
ValueName: "Version"
ValueData

Определяет значение параметра. Если параметр ValueType имеет значение string, expandsz или multisz, то строка может содержать константы. Если типом данных является dword или qword, это значение может быть десятичным целым числом (например, "123"), шестнадцатеричным целым числом (например, "$7B") или константой, которая преобразуется в целое число. Если тип данных binary, то значение представляет собой последовательность шестнадцатеричных байтов в формате: "00 ff 12 34". Если же тип данных none, этот параметр игнорируется.

Если типом данных является string, expandsz или multisz, в этом параметре можно использовать специальную константу с именем {olddata}. Константа {olddata} заменяется предыдущими данными значения реестра, что удобно использовать в случае необходимости дополнить существующее значение новыми данными, например, {olddata};{app}. Если значение не существует или не является строковым типом данных, константа {olddata} автоматически удаляется. Также она будет автоматически удалена, если создаваемое значение относится к типу multisz, но существующее значение не является многострочным (т.е. это REG_SZ или REG_EXPAND_SZ), и наоборот.

При значении с типом данных multisz в этом параметре можно использовать специальную константу с именем {break} для вставки разрыва строк (нулей).

Пример:
ValueData: "1.0"
Permissions

Определяет дополнительные разрешения для получения доступа в раздел реестра, защищенного ACL (списки управления доступом). Не рекомендуется использовать этот параметр, если вы не знакомы с ACL или почему их следует изменять, поскольку его неправильное использование может негативно повлиять на безопасность системы.

Чтобы этот параметр имел эффект, текущий пользователь должен иметь возможность изменять разрешения для раздела реестра. Если эти условия не выполняются, сообщение об ошибке не выводится, и разрешения не устанавливаются.

Этот параметр следует использовать только для частных разделов реестра вашего приложения. Никогда не изменяйте ACL для раздела верхнего уровня, подобно HKEY_LOCAL_MACHINE\SOFTWARE, иначе безопасность пользовательских систем будет нарушена.

Указанные разрешения устанавливаются независимо от того, существовал ли раздел реестра ранее. Разрешения не устанавливаются, если параметр ValueType имеет значение none и используется флаг deletekey или deletevalue.

Параметр может содержать один или более значений, разделённых пробелами, в следующем формате:

Для секции [Registry] поддерживаются следующие типы доступа:

full

Предоставляет разрешение "Полный доступ", аналогичное типу modify (см. ниже), но дополнительно позволяет указанному пользователю/группе стать владельцем раздела реестра и изменить его разрешения. Используется редко; как правило modify вполне достаточно.

modify

Предоставляет разрешение "Модификация", которое позволяет указанному пользователю/группе читать, создавать, изменять и удалять значения и подразделы реестра.

read

Предоставляет разрешение "Чтение", которое позволяет указанному пользователю/группе читать значения и подразделы реестра.

Пример:
Permissions: users-modify
Flags

Этот параметр представляет собой набор дополнительных опций. Допускается использовать несколько опций, разделяя их пробелами. Поддерживаются следующие опции:

createvalueifdoesntexist

Если указан этот флаг, программа установки создаст параметр только тогда, когда параметра с таким же именем ещё не существует. Этот флаг не работает, если тип данных none или указан флаг deletevalue.

deletekey

Если указан этот флаг, программа установки сначала попытается удалить весь раздел реестра, если он существует, включая все параметры и подразделы в нём. Затем, если параметр ValueType не имеет значения none, будет создан новый раздел и параметр.

Во избежание сбоев, в процессе установки этот флаг игнорируется, если параметр Subkey является пустым или содержит только символы обратной косой черты.

deletevalue

Если указан этот флаг, программа установки сначала попытается удалить параметр, если он существует. Затем, если параметр ValueType не имеет значения none, будет создан новый раздел, если он ещё не существует, а после новый параметр.

dontcreatekey

Если указан этот флаг, программа установки не будет пытаться создать раздел или какой-либо параметр, если раздел в системе пользователя уже отсутствует. Никаких сообщений об ошибках показано не будет, если раздел не существует.

Как правило, этот флаг используется в сочетании с флагом uninsdeletekey для удаления разделов в процессе деинсталляции, но не их создания во время установки.

noerror

Этот флаг отключает сообщение об ошибке, если программе установке по каким-либо причинам не удаётся создать раздел или параметр.

preservestringtype

Применяется только в том случае, если параметр ValueType имеет значение string или expandsz. Если указан этот флаг и параметр ещё не существует или существует, но его значение не является строковым (REG_SZ или REG_EXPAND_SZ), он будет создан с типом данных, указанным в параметре ValueType. Если же параметр существует и является строковым, он будет заменён значением с тем же типом данных, что и предыдущее значение.

uninsclearvalue

После деинсталляции программы, устанавливает для данных параметра пустую строку (тип REG_SZ). Этот флаг нельзя использовать вместе с флагом uninsdeletekey.

uninsdeletekey

После деинсталляции программы, выполняет удаление всего раздела, включая все параметры и подразделы в нём. Очевидно, что использовать его для разделов реестра, к которым обращается Windows, довольно безрассудно. Рекомендуется использовать этот флаг только для частных разделов реестра вашего приложения.

Во избежание сбоев, в процессе установки этот флаг игнорируется, если параметр Subkey является пустым или содержит только символы обратной косой черты.

uninsdeletekeyifempty

После деинсталляции программы выполняет удаление раздела реестра, если в нём больше не осталось никаких параметров или подразделов. Этот флаг нельзя использовать вместе с флагом uninsdeletevalue.

Во избежание сбоев, в процессе установки этот флаг игнорируется, если параметр Subkey является пустым или содержит только символы обратной косой черты.

uninsdeletevalue

После деинсталляции программы выполняет удаление параметра. Этот флаг нельзя использовать вместе с флагом uninsdeletekeyifempty.

ВНИМАНИЕ: в ранних версиях Inno Setup (до версии 1.1) этот флаг можно использовать типом данных none и он будет работать как флаг "удалить раздел, если он пуст". Этот метод больше не поддерживается. Теперь для этого необходимо использовать флаг uninsdeletekeyifempty.

Пример:
Flags: uninsdeletevalue

Параметры секций [Components] и [Tasks]

Общие параметры