Inno-Setup не разрешает доступ ко всем разделам реестра, почему? - PullRequest
14 голосов
/ 27 октября 2010

Я использую этот код, чтобы узнать, существует ли ключ:

  if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Autodesk') then
  begin
    MsgBox('Key exists!!', mbInformation, MB_OK);
  end;

для этого примера, он работает, у меня есть окно сообщения, но с этим нет:

  if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Autodesk\Maya') then
  begin
    MsgBox('Key exists!!', mbInformation, MB_OK);
  end;

Но на моем компьютере есть ключ 'Maya'.Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ:

На самом деле, кажется, что inno-setup не имеют доступа к нужным клавишам ... Например, с помощью этого кода я перечисляю все подразделыHKEY_LOCAL_MACHINE\SOFTWARE, но (!) результат - это все подразделы HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node ...

  if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE', Names) then
  begin
    S := '';
    for I := 0 to GetArrayLength(Names)-1 do
      S := S + Names[I] + #13#10;
    MsgBox('List of subkeys:'#13#10#13#10 + S, mbInformation, MB_OK);
  end;

почему эта Wow6432Node клавиша?

Ответы [ 3 ]

19 голосов
/ 27 октября 2010

Дай угадаю ... ты на Windows 7 64-битная?

Это вовсе не ошибка InnoSetup, это то, что Реестр виртуализирован в Vista и выше, а на 64-битных есть ветки для собственных 64-битных и WOW 32-битных .

В этом случае, поскольку InnoSetup является 32-разрядной программой, ОС направляет все свои запросы HKLM \ Software Registry на WOW6432Node.

Если ваша программа 64-битная, то вы также хотите использовать 64-битную программу установки.

18 голосов
/ 13 июня 2011

Это не вина InnoSetup вообще; Реестр виртуализирован в Vista и выше, а на 64-битных есть ветви для собственных 64-битных и WOW'-32-битных .

.В этом случае, поскольку InnoSetup является 32-разрядной программой, ОС направляет все свои запросы HKLM \ Software Registry на WOW6432Node.

Для обработки виртуализации реестра в вашей программе установки вы можете специально использовать корневые ключи x86 и x64.,Например, используйте «HKLM32» или «HKLM64» в разделе [Registry], когда вам нужно провести различие.В разделе [Код] оберните вызовы вспомогательных функций реестра с помощью HKLM64 в блоке if IsWin64.

Этот пример работает из нашего установщика, независимо от того, объявлен ли установщик как установщик x64.

function Mobu120x64IsAvailable(): Boolean;
var
  resultString: String;
begin
  resultString := 'No';
  if IsWin64 then
  begin
    Result := RegValueExists(HKLM64, 'SOFTWARE\Autodesk\MotionBuilder\2012', 'InstallPath');
    if Result then begin
      resultString := 'Yes';
    end;
    Log('Win64: Found Mobu 12.0 for x64?:' + resultString);
  end;
end;
1 голос
/ 27 октября 2010

Вы уверены, что Software\Autodesk\Maya является ключом реестра?Может быть, это просто значение, и вы должны использовать RegValueExists.

...