Ошибки работы с реестром Windows в Inno Setup: как правильно использовать RegKeyExists
Вопрос, заданный пользователем, касается проблемы, с которой он столкнулся при работе с функцией RegKeyExists в Inno Setup. Функция предназначена для проверки существования определенного ключа в реестре Windows, но по каким-то причинам возвращала False, несмотря на то, что ключ действительно существовал.
Контекст проблемы
Пользователь предоставил код, в котором определена константа OldVersionRegKey, содержащая путь к ключу в реестре, и функция GetKey, которая возвращает значение для указания 32-битного или 64-битного реестра в зависимости от архитектуры системы. В процедуре CheckOldVersion используется функция RegKeyExists для проверки существования ключа, но результат всегда оказывается False.
Подтвержденный ответ
Проблема заключается в том, что в пути к ключу используется обратный слеш в начале. В документации RegKeyExists указано, что путь к ключу должен начинаться без слеша. Следовательно, исправленный код будет выглядеть так:
Также, если скрипт не использует 64-битный режим установки, корневой ключ должен быть HKLM32. В этом случае проверка существования ключа будет выглядеть так:
Если же требуется, чтобы скрипт был совместим с 64-битным режимом установки, следует использовать функцию Is64BitInstallMode вместо IsWin64.
Альтернативный ответ
Данных об альтернативном ответе в предоставленном контексте не обнаружено.
Пример кода на Object Pascal (Delphi)
const
OldVersionRegKey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1'; // Исправленный путь к ключу без слеша
var
HasOldVersion: Boolean;
function GetKey: Integer;
begin
if Is64BitInstallMode then // Используем Is64BitInstallMode для совместимости с 64-битным режимом
Result := HKLM64
else
Result := HKLM32;
end;
procedure CheckOldVersion;
begin
HasOldVersion := RegKeyExists(GetKey, OldVersionRegKey);
// ... Дальнейшие действия
end;
Заключение
При работе с реестром Windows в Inno Setup важно правильно указывать путь к ключу, не забывая про слеши и корректно использовать функции для определения архитектуры установки. Следуя этим рекомендациям, можно избежать ошибок, подобных описанной в вопросе пользователя.
Пользователь столкнулся с ошибкой при использовании функции `RegKeyExists` в Inno Setup из-за неправильного указания пути к ключу в реестре.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.