使用 Microsoft.Win32 命名空间读取和写入注册表(Visual Basic)

尽管My.Computer.Registry在针对注册表编程时应涵盖基本需求,但也可以使用 Registry .NET 命名空间中的RegistryKeyMicrosoft.Win32类。

注册表类中的项

Registry 类提供可用于访问子项及其值的基注册表项。 这些基项本身是只读的。 下表列出了由 Registry 类公开的七个键,并对其进行了描述。

密钥 说明
ClassesRoot 定义文档的类型和与这些类型关联的属性。
CurrentConfig 包含不特定于用户的硬件配置信息。
CurrentUser 包含有关当前用户首选项的信息,例如环境变量。
DynData 包含动态注册表数据,例如虚拟设备驱动程序使用的注册表数据。
LocalMachine 包含五个子项(硬件、SAM、安全、软件和系统),用于保存本地计算机的配置数据。
PerformanceData 包含软件组件的性能信息。
Users 包含有关默认用户首选项的信息。

重要

将数据写入当前用户< c0 />比写入本地计算机< c1 />更安全。 当你创建的项以前已由其他进程(可能是恶意的)进行了创建时,会发生通常称为“强占”的情况。 若要防止出现这种情况,请使用某种方法,例如 GetValue ,若键尚不存在,则此方法返回 Nothing

从注册表读取值

以下代码演示如何从HKEY_CURRENT_USER读取字符串。

Dim regVersion As Microsoft.Win32.RegistryKey
Dim keyValue = "Software\\Microsoft\\TestApp\\1.0"
regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyValue, False)
Dim intVersion As Integer = 0
If regVersion IsNot Nothing Then
    intVersion = regVersion.GetValue("Version", 0)
    regVersion.Close()
End If

以下代码读取、递增,然后将字符串写入HKEY_CURRENT_USER。

Dim regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
                  "SOFTWARE\\Microsoft\\TestApp\\1.0", True)
If regVersion Is Nothing Then
    ' Key doesn't exist; create it.
    regVersion = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(
                 "SOFTWARE\\Microsoft\\TestApp\\1.0")
End If

Dim intVersion As Integer = 0
If regVersion IsNot Nothing Then
    intVersion = regVersion.GetValue("Version", 0)
    intVersion = intVersion + 1
    regVersion.SetValue("Version", intVersion)
    regVersion.Close()
End If

另请参阅