如何检查注册表项是否存在并退出安装程序



我试图制作安装文件来修补以前的程序。安装程序必须能够检查是否安装了以前的程序。

这是我无法使用的代码

[Code]
function GetHKLM() : Integer;
begin
 if IsWin64 then
  begin
    Result := HKLM64;
  end
  else
  begin
    Result := HKEY_LOCAL_MACHINE;
  end;
end;
function InitializeSetup(): Boolean;
var
  V: string;
begin
  if RegKeyExists(GetHKLM(), 'SOFTWAREABCOptionSettings')
  then
    MsgBox('please install ABC first!!',mbError,MB_OK);
end;

我的情况是

  • 必须在中的32位或64位窗口中检查RegKeyExists
  • 若并没有安装上一个程序,显示错误消息并退出安装程序,否则继续进程

如何修改代码
提前谢谢。

**更新以修复Wow6432Node问题。我试图修改我的代码

[Code]
function InitializeSetup: Boolean;
begin
  // allow the setup to continue initially
  Result := True;
  // if the registry key based on current OS bitness doesn't exist, then...
if IsWin64 then
begin
 if not RegKeyExists(HKLM, 'SOFTWAREWow6432NodeABCOptionSettings') then
  begin
   // return False to prevent installation to continue
   Result := False;
   // and display a message box
   MsgBox('please install ABC first!!', mbError, MB_OK);
  end
  else
   if not RegKeyExists(HKLM, 'SOFTWAREABCOptionSettings' then
    begin
    // return False to prevent installation to continue
    Result := False;
    // and display a message box
    MsgBox('please install ABC first!!', mbError, MB_OK);
   end
  end;
end;

问题中更新的代码不正确——除了在RegEdit中查看路径外,您永远不应该在任何地方使用Wow6432Node

根据您所描述的行为,您实际上正在寻找一个32位的应用程序。在这种情况下,无论Windows是32位还是64位,都可以使用相同的代码;你想得太多了。

以下是您更新问题的更正代码:

[Code]
function InitializeSetup: Boolean;
begin
  // allow the setup to continue initially
  Result := True;
  if not RegKeyExists(HKLM, 'SOFTWAREABCOptionSettings') then
  begin
    // return False to prevent installation to continue
    Result := False;
    // and display a message box
    MsgBox('please install ABC first!!', mbError, MB_OK);
  end;
end;

相关内容

  • 没有找到相关文章

最新更新