Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибки работы с реестром Windows в Inno Setup: как правильно использовать `RegKeyExists`

Delphi , ОС и Железо , Реестр

Ошибки работы с реестром Windows в Inno Setup: как правильно использовать RegKeyExists

Вопрос, заданный пользователем, касается проблемы, с которой он столкнулся при работе с функцией RegKeyExists в Inno Setup. Функция предназначена для проверки существования определенного ключа в реестре Windows, но по каким-то причинам возвращала False, несмотря на то, что ключ действительно существовал.

Контекст проблемы

Пользователь предоставил код, в котором определена константа OldVersionRegKey, содержащая путь к ключу в реестре, и функция GetKey, которая возвращает значение для указания 32-битного или 64-битного реестра в зависимости от архитектуры системы. В процедуре CheckOldVersion используется функция RegKeyExists для проверки существования ключа, но результат всегда оказывается False.

Подтвержденный ответ

Проблема заключается в том, что в пути к ключу используется обратный слеш в начале. В документации RegKeyExists указано, что путь к ключу должен начинаться без слеша. Следовательно, исправленный код будет выглядеть так:

const
  OldVersionRegKey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1';

Также, если скрипт не использует 64-битный режим установки, корневой ключ должен быть HKLM32. В этом случае проверка существования ключа будет выглядеть так:

HasOldVersion := RegKeyExists(HKLM32, OldVersionRegKey);

Если же требуется, чтобы скрипт был совместим с 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Реестр ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-13 20:43:23/0.0035388469696045/0