gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:45:12 25 4
gpt4 key购买 nike

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

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 key 存在于我的计算机上。有谁能够帮助我?

编辑 :

事实上,似乎 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 key ?

最佳答案

这根本不是 Inno Setup 的错。 the Registry is virtualized在 Vista 和更高版本中,在 64 位上有 branches for native 64-bit and WOW'ed 32-bit .

在这种情况下,由于 Inno Setup 是一个 32 位程序,操作系统会将其所有 HKLM\SoftwareWOW6432Node 的注册表请求.

要在安装程序中处理注册表虚拟化,您可以专门使用 x86 和 x64 键根。例如,使用 HKLM32HKLM64在您的 [Registry]需要区分的部分。在 [Code]部分,使用 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;

关于registry - Inno Setup 不允许访问所有注册表项,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com