我试图制作安装文件来修补以前的程序。安装程序必须能够检查是否安装了以前的程序。
这是我无法使用的代码
[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;