vb.net 2010-从注册表读取不需要';t工作-赢7

vb.net 2010-从注册表读取不需要';t工作-赢7,vb.net,registry,Vb.net,Registry,我以为这会非常简单,但是 好的,我只是想从注册表中读取一个值。我已经看过好几个例子,但没有一个能起作用。我也尝试过在管理模式下运行我的应用程序,但仍然一无所获。有人能帮忙吗 从我尝试过的所有示例中,我将使用最简单的一个 这项工作: Dim val As String val = Registry.LocalMachine.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToSt

我以为这会非常简单,但是

好的,我只是想从注册表中读取一个值。我已经看过好几个例子,但没有一个能起作用。我也尝试过在管理模式下运行我的应用程序,但仍然一无所获。有人能帮忙吗

从我尝试过的所有示例中,我将使用最简单的一个

这项工作:

Dim val As String
val = Registry.LocalMachine.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToString()
MsgBox(val)
这个(我想要的)没有:

后一个路径和值是我在注册表中手动创建的。我已经检查了两者之间的权限,它们完全相同。我还尝试以管理员身份运行该应用程序。我在val=行上得到一个运行时错误,它说:使用“new”关键字创建一个对象实例

有什么想法吗?所有各种各样的在线例子都失败了,就我而言,我不知道为什么

干杯,
J

我已经用为x86编译的示例应用程序尝试了您的代码,正如预期的那样,它失败了,出现了空值异常

我假设您正在为x86模式构建应用程序,并在64位环境中运行。
当然,如果不是这样,请告诉我,我将删除此答案

在上述情况下,在LocalMachine.Software注册表路径中读取/写入的调用将由操作系统自动更改为在Software\WOW6432节点子项中读取/写入,因此,您的代码无法找到手动插入的项(“Software\PTSClient”)。
此代码将从注册表.LocalMachine.OpenSubKey(“软件\PTSClient”)返回一个空值,导致无法获取ConfigDB值


您需要将密钥/值添加到软件\WOW6432节点路径,或编译应用程序以使用任何CPU模式,或让代码将值写入寄存器(它将被重定向到WOW6432节点)。

您的应用程序是在64位Windows框上运行的32位应用程序吗?啊……请注意!!我不知道有什么不同。毫无疑问,正如你们所收集的,我是一个新的(ish)开发人员,永远不会了解这一点。现在我已经两次被32位和64位操作系统刺痛了…*叹气*。谢谢伙计,非常感谢!!!
Dim val As String
val = Registry.LocalMachine.OpenSubKey("SOFTWARE\PTSClient").GetValue("ConfigDB").ToString()
MsgBox(val)