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

Устранение ошибок чтения Machine GUID в Inno Setup на 64-битной ОС

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

При работе с Inno Setup в контексте 64-битных операционных систем, может возникнуть проблема с чтением Machine GUID из реестра. Это связано с тем, что Inno Setup является 32-битным процессом, и для доступа к 64-битному разделу реестра необходимо использовать специальный ключ HKEY_LOCAL_MACHINE_64.

Проблема

Пользователь столкнулся с проблемой при попытке прочитать Machine GUID из реестра с помощью функции RegQueryStringValue в Inno Setup. Код, который должен был выполнить чтение, выглядит следующим образом:

procedure StoreHwID();
var
    HwId: String;
begin
    RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Cryptography', 'MachineGuid', HwId);
    MsgBox('Value is "' + HwId + '"', mbInformation, MB_OK);
end;

Однако значение в переменной HwId не устанавливается, и код не работает корректно на 64-битных операционных системах.

Решение

Для решения данной проблемы необходимо использовать ключ HKEY_LOCAL_MACHINE_64 вместо HKEY_LOCAL_MACHINE. Это позволит Inno Setup обращаться к 64-битному разделу реестра, где и хранится Machine GUID.

Исправленный код будет выглядеть следующим образом:

procedure StoreHwID();
var
    HwId: String;
    Is64Bit: Integer;
begin
    Is64Bit := IsWin64();
    if Is64Bit then
        RegQueryStringValue(HKEY_LOCAL_MACHINE_64, 'SOFTWARE\Microsoft\Cryptography', 'MachineGuid', HwId)
    else
        RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Cryptography', 'MachineGuid', HwId);
    MsgBox('Value is "' + HwId + '"', mbInformation, MB_OK);
end;

В данном примере используется функция IsWin64(), которая возвращает True, если операционная система является 64-битной. В зависимости от этого, выбирается соответствующий ключ реестра.

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

Альтернативный способ не требует использования двух вызовов RegQueryStringValue. Вместо этого, можно определить, является ли операционная система 64-битной, и на основе этого результата выбрать нужный ключ реестра, сохраняя его в целочисленной переменной, которая затем используется в вызове RegQueryStringValue.

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

Подтвержденное решение заключается в использовании ключа HKEY_LOCAL_MACHINE_64 для доступа к Machine GUID на 64-битных операционных системах при работе с Inno Setup.


В этой статье мы рассмотрели, как исправить ошибку при чтении Machine GUID из реестра в Inno Setup, особенно на 64-битных системах. Мы обсудили, почему стандартный подход не работает, и предоставили исправленный код, который учитывает особенности 64-битных операционных систем. В примерах кода использовался язык Object Pascal, который является стандартным для Delphi и Inno Setup.

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

Проблема связана с чтением Machine GUID из реестра в Inno Setup на 64-битной системе, где необходимо использовать специальный ключ `HKEY_LOCAL_MACHINE_64` для доступа к 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:53:06/0.0032999515533447/0