如何:在 Visual Basic 中从注册表项中读取值

My.Computer.Registry 对象的 GetValue 方法可以用于读取 Windows 注册表中的值。

如果在下面的示例中,“Software\MyApp”项不存在,则引发异常。 如果在下面的示例中,ValueName"Name" 不存在,则返回 Nothing

GetValue 方法还可以用于确定特定注册表项中是否存在给定值。

代码从 Web 应用程序读取注册表时,当前用户取决于在 Web 应用程序中实现的身份验证和模拟。

从注册表项读取值

  • 使用 GetValue 方法(指定路径和名称)可从注册表项读取值。 下面的示例从 HKEY_CURRENT_USER\Software\MyApp 读取值 Name 并将它显示在消息框中。

    Dim readValue = My.Computer.Registry.GetValue(
        "HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
    MsgBox("The value is " & readValue)
    

此代码示例也可作为 IntelliSense 代码片段。 在代码片段选取器中,它位于“Windows 操作系统”>>“注册表”中。 有关详细信息,请参阅代码片段

确定值是否存在于注册表项中

  • 使用 GetValue 方法可检索值。 下面的代码检查值是否存在并在它不存在时返回消息。

    If My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\TestApp",
    "TestValue", Nothing) Is Nothing Then
        MsgBox("Value does not exist.")
    End If
    

可靠编程

注册表包含用于存储数据的顶层(或根)项。 例如,HKEY_LOCAL_MACHINE 根项用于存储所有用户使用的计算机级别设置,而 HKEY_CURRENT_USER 用于存储特定于单个用户的数据。

以下情况可能会导致异常:

.NET Framework 安全性

若要运行此进程,程序集需要 RegistryPermission 类授予的特权等级。 如果在部分信任上下文中运行,该进程可能会因特权不足而引发异常。 同样,用户必须具有用于创建或写入设置的正确 ACL。 例如,具有代码访问安全性权限的本地应用程序可能没有操作系统权限。 有关详细信息,请参阅 Code Access Security Basics

注意

代码访问安全性 (CAS) 已在所有版本的 .NET Framework 和 .NET 中弃用。 如果使用与 CAS 相关的 API,最新版本的 .NET 不会遵循 CAS 注释,并会生成错误。 开发人员应寻求用于完成安全任务的替代方法。

另请参阅