将注册表值作为字符串返回

时间:2016-06-15 16:32:26

标签: c#

我正在尝试阅读另一个应用程序注册表值,但我没有取得多大成功。我在Google上搜索了一整页半的搜索结果,但找不到我想要的内容。

我正在尝试阅读以下注册表值:

\\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\AVG CloudCare\DisplayVersion

典型值为:'3.5.3'

我正在使用我在网上找到的代码:

RegistryKey RegInfo = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\AVG CloudCare", false);

object CCVersionReg = RegInfo.GetValue("DisplayVersion", "0");

Console.WriteLine(CCVersionReg);
Console.ReadLine();

但是我总是收到错误:“对象引用未设置为对象的实例。”。

我试图将对象转换为这样的字符串:

Console.WriteLine(CCVersionReg.ToString);

这也不起作用,错误“无法从'bool'转换为'方法组'。

我需要这个的原因是将此版本与更新程序应用程序的已知最新版本进行比较,我需要使用字符串来比较这些值。

3 个答案:

答案 0 :(得分:2)

试试这个

var key = @"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\AVG CloudCare";
Console.WriteLine(Registry.GetValue(key, "DisplayVersion", "0")?.ToString());

ToString()对象上调用null时,会抛出Object reference not set to an instance of an object

答案 1 :(得分:2)

您的错误

Console.WriteLine(CCVersionReg.ToString);

抛出该错误,因为CCVersion.ToString是一个方法组。您需要通过执行以下操作来调用该方法:

Console.WriteLine(CCVersionReg.ToString());

但是,如果CCVersionReg为null,您将获得空引用异常(如您所见)。检查它是否正确创建

答案 2 :(得分:0)

您的应用程序是否在64位操作系统上运行32位? 如果是,请参阅:OpenSubKey() returns null for a registry key that I can see in regedit.exe