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

Обход виртуализации реестра в Inno Setup для 32- и 64-битных систем

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

При работе с Inno Setup может возникнуть ситуация, когда доступ к определенным ключам реестра ограничен из-за виртуализации, введенной в Windows Vista и более поздних версиях, а также на 64-битных системах. Это связано с тем, что в 64-битных операционных системах существуют отдельные ветки реестра для 64-битных и 32-битных приложений (WOW64). Приложения, работающие в 32-битном режиме, автоматически перенаправляются в ветку Wow6432Node, что может вызвать проблемы при попытке доступа к 64-битным ключам.

Проблема

Разработчики, использующие Inno Setup для создания установщиков, могут столкнуться с трудностями при попытке доступа к ключам реестра, которые не отображаются из-за виртуализации. Например, при попытке проверить наличие ключа Software\Autodesk\Maya в 64-битной системе, Inno Setup может не обнаружить его, так как будет работать в 32-битном режиме и, следовательно, обращаться к Wow6432Node.

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

Для решения этой проблемы можно использовать специальные ключи HKLM32 и HKLM64 в секции [Registry] и обернуть вызовы функций работы с реестром в блоки if IsWin64 в секции [Code]. Таким образом, можно различать 32- и 64-битные ключи реестра.

Пример кода

function CheckMayaInstalled(): Boolean;
var
  resultString: String;
begin
  resultString := 'No';
  if IsWin64 then
  begin
    Result := RegValueExists(HKLM64, 'SOFTWARE\Autodesk\Maya', 'InstallPath');
    if Result then begin
      resultString := 'Yes';
      Log('Win64: Maya is installed.');
    end;
  end
  else
  begin
    Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Autodesk\Maya');
    if Result then begin
      resultString := 'Yes';
      Log('Win32: Maya is installed, but 32-bit.');
    end;
  end;
  Log('Maya installed?:' + resultString);
end;

Альтернативный ответ

Если вам необходимо создать установщик, который работает как в 32-битных, так и в 64-битных системах, и при этом необходимо определить, установлена ли 32-битная или 64-битная версия программы (например, Maya), можно использовать параметр ArchitecturesInstallIn64BitMode для переключения в 64-битный режим установки. Однако, если ваш плагин не предназначен для 64-битной работы, вам не нужен 64-битный установщик, так как 64-битные программы не могут использовать 32-битные плагины.

Заключение

При работе с Inno Setup важно понимать механизмы виртуализации реестра в Windows и уметь корректно работать с 32- и 64-битными ключами. Использование специальных ключей HKLM32 и HKLM64, а также проверка текущего режима работы системы с помощью IsWin64, позволяет эффективно обходить ограничения, связанные с виртуализацией реестра.

Создано по материалам из источника по ссылке.

Обход виртуализации реестра в Inno Setup для корректной работы с 32- и 64-битными системами, чтобы обеспечить доступ к соответствующим ключам реестра без ограничений, введенных Windows Vista и в 64-битных операционных системах.


Комментарии и вопросы

Получайте свежие новости и обновления по 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:48:35/0.0032510757446289/0