首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取注册表项时的C# NullReferenceException

读取注册表项时的C# NullReferenceException
EN

Stack Overflow用户
提问于 2010-10-11 22:23:36
回答 4查看 1.3K关注 0票数 1

在处理按钮单击事件的一些简单代码中,我得到了一个NullReferenceException错误。我还需要在最后添加一些代码,以便在消息框中实际显示来自"TcpAddr“的值。这将允许您运行该程序,但单击该按钮会导致它抛出错误。

另外:更好的做法是将实际的查询移出单击事件,使单击事件句柄为MessageBox.Show()?

代码语言:javascript
复制
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace LiteSwitch
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            RegistryKey RegKey = Registry.LocalMachine;
            RegKey = RegKey.OpenSubKey("SOFTWARE\\Altiris\\Client Service");
            object CurrDS = RegKey.GetValue("TcpAddr"); //This line causes the NRE Error
            MessageBox.Show("Current DS:");
        }
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-11 22:40:45

如果您确定注册表项确实存在(使用Regedit.exe),那么如果您在64位版本的Windows上运行,就会遇到问题。默认情况下,VS2010项目被强制在32位模式下运行,它会看到另一组注册表项。

Project + Properties,Build选项卡,Platform Target =任意CPU。对Release配置重复上述步骤。

票数 5
EN

Stack Overflow用户

发布于 2010-10-11 22:26:08

我的猜测是

代码语言:javascript
复制
RegKey = RegKey.OpenSubKey("SOFTWARE\\Altiris\\Client Service"); 

返回null,可能是因为该键不存在。

验证密钥是否存在以及提供的注册表项路径是否正确。

票数 4
EN

Stack Overflow用户

发布于 2010-10-11 22:32:04

根据the documentation for OpenSubKey()的说法,“如果找不到指定的子键,则返回null。”如果变量为空,则调用该变量上的方法将抛出异常。

“将实际查询移出单击事件并使单击事件句柄为MessageBox.Show()是不是更好的做法?”

如果去掉它,它不一定会反映键的当前值,例如,如果另一个程序在您的程序运行时修改了它。根据您的程序,这可能是可以的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3907074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档