In order to access 64-bit registry from 32 bit applications, KEY_WOW64_64KEY is to be used with the RegOpenKeyEx method as shown in the below example.
Delphi Version : 2006
Sql Version : 2005 x64
// Look in registry for version
const
KEY_WOW64_64KEY = $0100;
procedure Fetch64BitInstalledInstances(slInstanceNames: TStringList);
const
sSQLKey = 'SOFTWARE\Microsoft\Microsoft Sql Server';
sInstalledInstancesValue = 'InstalledInstances';
var
key: HKEY;
p, buffer: PChar;
valueLen : integer;
begin
if not Assigned(slInstanceNames) then
slInstanceNames := TStringList.Create
else
slInstanceNames.Clear;
if RegOpenKeyEx(HKEY_LOCAL_MACHINE,
PChar(sSQLKey),
0,
0,
KEY_QUERY_VALUE or KEY_WOW64_64KEY,
key) = ERROR_SUCCESS then
begin
GetMem(buffer, valueLen);
try
RegQueryValueEx(key,
begin
GetMem(buffer, valueLen);
try
RegQueryValueEx(key,
PChar(sInstalledInstancesValue),
nil,
nil,
PBYTE(buffer),
@valueLen);
p := buffer;
while (p^ <> #0) do
begin
slInstanceNames.Add(p);
Inc(p, lstrlen(p) + 1)
end
finally
FreeMem(buffer)
end
end;
end;
nil,
nil,
PBYTE(buffer),
@valueLen);
p := buffer;
while (p^ <> #0) do
begin
slInstanceNames.Add(p);
Inc(p, lstrlen(p) + 1)
end
finally
FreeMem(buffer)
end
end;
end;
0 comments:
Post a Comment