使用 Microsoft.Win32 命名空间读取和写入注册表 (Visual Basic)
虽然在针对注册表进行编程时,My.Computer.Registry
应涵盖你的基本需求,不过你还可以使用 .NET 的 Microsoft.Win32 命名空间中的 Registry 和 RegistryKey 类。
注册表类中的项
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