C # NullReferenceException при чтении раздела реестра - PullRequest
1 голос
/ 11 октября 2010

Я получаю сообщение об ошибке NullReferenceException для некоторого простого кода для обработки события нажатия кнопки.У меня все еще есть немного кода, который нужно добавить в самом конце, чтобы отобразить значение из «TcpAddr» в окне сообщения.Это позволит вам запустить программу, но нажатие на кнопку вызывает ошибку.

Кроме того: Лучше практиковать, чтобы убрать фактический запрос из события 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:");
        }
    }
}

Ответы [ 4 ]

5 голосов
/ 11 октября 2010

Если вы уверены, что раздел реестра действительно существует (используйте Regedit.exe), то у вас проблема, если вы работаете в 64-разрядной версии Windows. Проект VS2010 по умолчанию вынужден запускаться в 32-битном режиме, он видит другой набор ключей реестра.

Project + Properties, вкладка Build, Platform Target = Any CPU. Повторите для конфигурации выпуска.

4 голосов
/ 11 октября 2010

Я предполагаю, что

RegKey = RegKey.OpenSubKey("SOFTWARE\\Altiris\\Client Service"); 

возвращает ноль, возможно потому, что этот ключ не существует.

Убедитесь, что ключ существует и указан правильный путь рег.

3 голосов
/ 11 октября 2010

В соответствии с документацией для OpenSubKey(), "если указанный подраздел не найден, возвращается ноль". Если переменная имеет значение null, вызов метода для нее вызовет это исключение.


"Лучше ли убрать фактический запрос из события click и просто заставить событие click обрабатывать MessageBox.Show ()?"

Если вы уберете его, оно не обязательно будет отражать текущее значение ключа, если, например, другая программа изменяет его во время работы вашей программы. В зависимости от вашей программы это может быть хорошо.

0 голосов
/ 11 октября 2010

Если он выдает NRE, это потому, что он не может найти значение, убедитесь, что оно написано правильно или предыдущая строка также не возвращает null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...