Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取注册表项时出现C NullReferenceException_C#_Visual Studio 2010 - Fatal编程技术网

C# 读取注册表项时出现C NullReferenceException

C# 读取注册表项时出现C NullReferenceException,c#,visual-studio-2010,C#,Visual Studio 2010,我在处理按钮单击事件的一些简单代码中遇到了NullReferenceException错误。我仍然需要在最后添加一些代码,以便在messagebox上实际显示来自TCPADD的值。这将允许您运行程序,但单击按钮会导致程序抛出错误 另外:将实际查询移出click事件并使click事件处理MessageBox.Show是更好的做法吗 using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.Wi

我在处理按钮单击事件的一些简单代码中遇到了NullReferenceException错误。我仍然需要在最后添加一些代码,以便在messagebox上实际显示来自TCPADD的值。这将允许您运行程序,但单击按钮会导致程序抛出错误

另外:将实际查询移出click事件并使click事件处理MessageBox.Show是更好的做法吗

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:");
        }
    }
}
我猜是这样

RegKey = RegKey.OpenSubKey("SOFTWARE\\Altiris\\Client Service"); 
返回null,可能是因为该键不存在

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

我猜是这样的

RegKey = RegKey.OpenSubKey("SOFTWARE\\Altiris\\Client Service"); 
返回null,可能是因为该键不存在


验证密钥存在且提供的注册表路径正确。

如果它抛出一个NRE,那是因为它找不到值,请确保它拼写正确,或者前一行没有返回null。

如果它抛出一个NRE,那是因为它找不到值,确保拼写正确,或者前一行没有返回null。

根据,如果找不到指定的子项,则返回null。如果变量为null,则对其调用方法将引发该异常

将实际查询移出click事件并使click事件处理MessageBox.Show是更好的做法吗

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:");
        }
    }
}
如果您将其取出,则它不一定反映密钥的当前值,例如,如果在您的程序运行时另一个程序对其进行了修改。根据您的程序,这可能没问题。

根据,如果找不到指定的子项,则返回null。如果变量为null,则对其调用方法将引发该异常

将实际查询移出click事件并使click事件处理MessageBox.Show是更好的做法吗

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:");
        }
    }
}

如果您将其取出,则它不一定反映密钥的当前值,例如,如果在您的程序运行时另一个程序对其进行了修改。根据您的程序,这可能没问题。

如果您确定注册表项确实存在,请使用Regedit.exe,如果您在64位版本的Windows上运行,则会出现问题。默认情况下,VS2010项目被迫以32位模式运行,它会看到另一组注册表项


项目+属性,构建选项卡,平台目标=任何CPU。对版本配置重复此操作。

如果您确定注册表项确实存在,请使用Regedit.exe,如果您在64位版本的Windows上运行,则会出现问题。默认情况下,VS2010项目被迫以32位模式运行,它会看到另一组注册表项


项目+属性,构建选项卡,平台目标=任何CPU。对发布配置重复上述操作。

我强烈建议您将变量以小写开头。例如,使用regKey而不是regKey。我强烈建议您让变量以小写开头。例如,使用regKey而不是regKey。路径完全以HKLM\SOFTWARE\Altiris\Client Service的形式存在,我想要的字符串是TcpAddr。在批处理文件中,这将被写入REG QUERY HKLM\SOFTWARE\Altiris\Client Service/v TCPADD。路径完全以HKLM\SOFTWARE\Altiris\Client Service的形式存在,我想要的字符串是TCPADD。在批处理文件中,这将被写入REG QUERY HKLM\SOFTWARE\Altiris\Client Service/v TCPADDR。该路径是否需要完全表示该值的路径?ie-将\TcpAddr添加到末尾?TcpAddr是一个字符串而不是一个键该路径是否需要完全表示该值的路径?ie-将\TcpAddr添加到末尾?TcpAddr是一个字符串而不是一个键谢谢,我在64位Windows7上运行这个。我会检查并报告。我不认为这是一个选项,这是VS2010 Express,这是Express版本中缺少的选项吗?是的,它缺少。叹气用记事本之类的文本编辑器打开.csproj并手动更改设置。它是元素,将其从x86更改为AnyCPU。谢谢,我正在64位Windows 7上运行它。我会检查并报告。我不认为这是一个选项,这是VS2010 Express,这是Express版本中缺少的选项吗?是的,它缺少。叹气用记事本之类的文本编辑器打开.csproj并手动更改设置。它是元素,将其从x86更改为AnyCPU。