Information in this topic applies to desktop applications only. |
Task Description
Computers running 64-bit operating systems store information on 32-bit and 64-bit applications separately. Registry information on 32-bit applications running in WOW64 (Windows on Windows 64) mode is stored in the HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node registry branch.
If your test is run on a 64-bit operating system, all registry calls made from within your tests to registry keys and values are redirected to the HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node branch.
If your test works with the system registry, make sure that it works with the appropriate registry branch.
Possible Solution
To access the Windows operating system’s registry from tests, use the Storages.Registry
method. It lets you specify whether you want to use a 32-bit or 64-bit registry.
The following code demonstrates how to use Storages.Registry
method to obtain registry values:
JavaScript, JScript
function EnumerateApps(OSType)
{
var Key, KeyName, ValueName, Count, DisplayName, InstallSource, UninstallString, Data, i;
if (OSType == 0 || OSType == 1)
{
Log.AppendFolder("Installed " + (OSType == 0 ? "32" : "64") + "-bit applications:");
// Gets an object for the system registry key
KeyName = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
Key = Storages.Registry(KeyName, HKEY_LOCAL_MACHINE, OSType);
// Determines how many keys the current key contains
Count = Key.SectionCount;
// Iterates through keys
for (i = 0; i < Count; i++)
{
// Obtains the key by its index
var s = Key.GetSubSectionByIndex(i);
// Obtains key values
DisplayName = s.GetOption("DisplayName", "not specified");
if (DisplayName != "not specified")
{
InstallSource = s.GetOption("InstallSource", "not specified");
UninstallString = s.GetOption("UninstallString", "not specified");
Data = "InstallSource: " + InstallSource + "\r\n" + "UninstallString: " + UninstallString;
// Posts key values to the test log
Log.Message(DisplayName, Data);
}
}
Log.PopLogFolder();
}
}
function Test()
{
// Determines the OS version and calls the function that enumerates installed applications
if (Sys.OSInfo.Windows64bit)
{
EnumerateApps(0);
EnumerateApps(1);
}
else
{
EnumerateApps(0);
}
}
Python
# Enumerates installed applications and posts information on them to the test log
def EnumerateApps(OSType):
if OSType == 0 or OSType == 1:
if OSType == 1:
OSBit = '64'
else:
OSBit = '32'
Log.AppendFolder('Installed ' + OSBit + '-bit applications:')
# Gets an object for the system registry key
KeyName = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
Key = Storages.Registry(KeyName, HKEY_LOCAL_MACHINE, OSType)
# Determines how many keys the current key contains
Count = Key.SectionCount;
# Iterates through keys
for i in range(0, Count):
# Obtains the key by its index
s = Key.GetSubSectionByIndex(i)
# Obtains key values
DisplayName = s.GetOption("DisplayName", "not specified")
if DisplayName != "not specified":
InstallSource = s.GetOption("InstallSource", "not specified")
UninstallString = s.GetOption("UninstallString", "not specified")
Data = "InstallSource: " + InstallSource + "\r\n" + "UninstallString: " + UninstallString
# Posts key values to the test log
Log.Message(DisplayName, Data)
Log.PopLogFolder()
def Test():
# Determines the OS version and calls the function that enumerates installed applications
if Sys.OSInfo.Windows64bit:
EnumerateApps(0)
EnumerateApps(1)
else:
EnumerateApps(0)
VBScript
' Determines the OS version and calls the function that enumerates installed applications
If Sys.OSInfo.Windows64bit Then
EnumerateApps(0)
EnumerateApps(1)
Else
EnumerateApps(0)
End If
End Sub
' Enumerates installed applications and posts information on them to the test log
Sub EnumerateApps(OSType)
Dim OSBit, Key, KeyName, ValueName, Count, DisplayName, InstallSource, UninstallString, Data, i
If OSType = 0 Or OSType = 1 Then
If OSType = 1 Then
OSBit = "64"
Else
OSBit = "32"
End If
Log.AppendFolder("Installed " & OSBit & "-bit applications:")
' Gets an object for the system registry key
KeyName = "Software\Microsoft\Windows\CurrentVersion\Uninstall"
Set Key = Storages.Registry(KeyName, HKEY_LOCAL_MACHINE, OSType)
' Determines how many keys the current key contains
Count = Key.SectionCount
' Iterates through keys
For i = 0 To Count - 1
' Obtains the key by its index
Set s = Key.GetSubSectionByIndex(i)
' Obtains key values
DisplayName = s.GetOption("DisplayName", "not specified")
If Not DisplayName = "not specified" Then
InstallSource = s.GetOption("InstallSource", "not specified")
UninstallString = s.GetOption("UninstallString", "not specified")
Data = "InstallSource: " & InstallSource & vbCrLf & "UninstallString: " & UninstallString
' Posts key values to the test log
Call Log.Message(DisplayName, Data)
End If
Next
Log.PopLogFolder
End If
End Sub
DelphiScript
procedure EnumerateApps(OSType);
var OSBit, Key, KeyName, ValueName, Count, DisplayName, InstallSource, UninstallString, Data, i, s;
begin
if ((OSType = 0) or (OSType = 1)) then
begin
if OSType = 1 then
OSBit := '64'
else
OSBit := '32';
Log.AppendFolder('Installed ' + OSBit + '-bit applications:');
// Gets an object for the system registry key
KeyName := 'Software\Microsoft\Windows\CurrentVersion\Uninstall';
Key := Storages.Registry(KeyName, HKEY_LOCAL_MACHINE, OSType);
// Determines how many keys the current key contains
Count := Key.SectionCount;
// Iterates through keys
for i := 0 to Count - 1 do
begin
// Obtains the key by its index
s := Key.GetSubSectionByIndex(i);
// Obtains key values
DisplayName := s.GetOption('DisplayName', 'not specified');
if DisplayName <> 'not specified' then
begin
InstallSource := s.GetOption('InstallSource', 'not specified');
UninstallString := s.GetOption('UninstallString', 'not specified');
Data := 'InstallSource: ' + InstallSource + #13#10 + 'UninstallString: ' + UninstallString;
// Posts key values to the test log
Log.Message(DisplayName, Data);
end;
end;
Log.PopLogFolder;
end;
end;
procedure Test();
begin
// Determines the OS version and calls the function that enumerates installed applications
if Sys.OSInfo.Windows64bit then
begin
EnumerateApps(0);
EnumerateApps(1);
end
else
EnumerateApps(0);
end;
C++Script, C#Script
function EnumerateApps(OSType)
{
var Key, KeyName, ValueName, Count, DisplayName, InstallSource, UninstallString, Data, i;
if (OSType == 0 || OSType == 1)
{
Log["AppendFolder"]("Installed " + (OSType == 0 ? "32" : "64") + "-bit applications:");
// Gets an object for the system registry key
KeyName = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
Key = Storages["Registry"](KeyName, HKEY_LOCAL_MACHINE, OSType);
// Determines how many keys the current key contains
Count = Key["SectionCount"];
// Iterates through keys
for (i = 0; i < Count; i++)
{
// Obtains the key by its index
var s = Key["GetSubSectionByIndex"](i);
// Obtains key values
DisplayName = s["GetOption"]("DisplayName", "not specified");
if (DisplayName != "not specified")
{
InstallSource = s["GetOption"]("InstallSource", "not specified");
UninstallString = s["GetOption"]("UninstallString", "not specified");
Data = "InstallSource: " + InstallSource + "\r\n" + "UninstallString: " + UninstallString;
// Posts key values to the test log
Log["Message"](DisplayName, Data);
}
}
Log["PopLogFolder"]();
}
}
function Test()
{
// Determines the OS version and calls the function that enumerates installed applications
if (Sys["OSInfo"]["Windows64bit"])
{
EnumerateApps(0);
EnumerateApps(1);
}
else
{
EnumerateApps(0);
}
}
See Also
Storages.Registry Method
Reading Sections and Options from the System Registry. Example