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

虽然在针对注册表进行编程时,My.Computer.Registry 应涵盖你的基本需求,不过你还可以使用 .NET 的 Microsoft.Win32 命名空间中的 RegistryRegistryKey 类。

注册表类中的项

Registry 类提供可以用于访问子项及其值的注册表基项。 这些基项本身是只读的。 下表列出并介绍了 Registry 类公开的七个项。

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

重要

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

从注册表中读取值

下面的代码演示如何从 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

另请参阅