1

我认为这会很简单,但是......

对,所以我只想从我的注册表中读取一个值。我已经经历了几个例子,但无法让它们中的任何一个起作用。我也尝试在管理员模式下运行我的应用程序,但仍然没有。有人可以帮忙吗?

在我尝试过的所有示例中,我将使用最简单的示例。

这有效:

Dim val As String
val = Registry.LocalMachine.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToString()
MsgBox(val)

这个(我想要的)没有:

Dim val As String
val = Registry.LocalMachine.OpenSubKey("SOFTWARE\PTSClient").GetValue("ConfigDB").ToString()
MsgBox(val)

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

有任何想法吗?所有各种在线示例都失败了,对于我的生活,我无法弄清楚为什么......

干杯,J

4

1 回答 1

2

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

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

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

您需要将您的键/值添加到 Software\Wow6432Node 路径或为 AnyCPU 模式编译您的应用程序或让您的代码将值写入寄存器(它将被重定向到 Wow6432Node)。

于 2012-09-18T22:13:57.917 回答