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)
ewa*_*all 18
让我猜一下......你在64位Windows 7上?
这根本不是InnoSetup的错,而是注册表在Vista及更高版本中虚拟化,在64位上有原生64位和WOW 32位的分支.
在这种情况下,由于InnoSetup是一个32位程序,操作系统会将其所有HKLM\Software Registry请求定向到WOW6432Node.
如果您的程序是64位,那么您也想使用64位安装程序.