Inno-Setup不允许访问所有注册表项,为什么?

Joh*_*Lev 17 registry inno-setup pascalscript

我使用此代码来了解密钥是否存在:

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

对于这个例子,它有效,我有消息框,但有了它,它没有:

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

但是"Maya"键存在于我的电脑上.有谁能够帮我 ?

编辑:

实际上,似乎inno-setup不能访问正确的键...例如,使用此代码我列出了所有子键Maya,但是(!)结果是所有子键HKEY_LOCAL_MACHINE\SOFTWARE...

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;
Run Code Online (Sandbox Code Playgroud)

为什么这个HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node关键?

Epu*_*Epu 20

这根本不是InnoSetup的错; 注册表在Vista及更高版本中虚拟化,在64位上有本机64位和WOW的32位分支.

在这种情况下,由于InnoSetup是一个32位程序,操作系统会将其所有HKLM\Software Registry请求定向到WOW6432Node.

要在安装程序中处理注册表虚拟化,您可以专门使用x86和x64密钥根.例如,当您需要区分时,请在[注册表]部分中使用"HKLM32"或"HKLM64".在[Code]部分中,在'if IsWin64'块中使用HKLM64包装注册表助手函数调用.

无论安装程序是否声明为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;
Run Code Online (Sandbox Code Playgroud)

  • 链接:http://www.jrsoftware.org/ishelp/index.php?topic = registrysection (2认同)

ewa*_*all 18

让我猜一下......你在64位Windows 7上?

这根本不是InnoSetup的错,而是注册表在Vista及更高版本中虚拟化,在64位上有原生64位和WOW 32位的分支.

在这种情况下,由于InnoSetup是一个32位程序,操作系统会将其所有HKLM\Software Registry请求定向到WOW6432Node.

如果您的程序是64位,那么您也想使用64位安装程序.

  • 嗯......我从来没有用自己的InnoSetup构建一个x64包.但帮助文档包括[32-与64位](http://www.jrsoftware.org/ishelp/index.php?topic=32vs64bitinstalls)和[64位安装的限制]的几个引用(http:/ /www.jrsoftware.org/ishelp/index.php?topic=64bitlimitations)有助于澄清重定向和不重定向的影响.但首先你可能需要通过将[ArchitecturesInstallIn64BitMode设置为"x64"]来启用64位模式(http://www.jrsoftware.org/ishelp/index.php?topic=setup_architecturesinstallin64bitmode)... (4认同)

spl*_*ash 1

您确定这Software\Autodesk\Maya是一个注册表项吗?也许这只是一个值,你必须使用RegValueExists.