Поиск ключей реестра в C#

Я работаю над проектом, который позволит мне удалить раздел реестра с ПК с Windows 7. В частности, я пытаюсь сделать программу, которая позволит мне удалить профиль с машины с помощью ключа ProfileList. Моя проблема в том, что независимо от того, что я пытаюсь, я не могу правильно прочитать ключ, который я хочу сделать, прежде чем я начну случайным образом удалять вещи. Мой код

     RegistryKey OurKey = Registry.LocalMachine;
            OurKey = OurKey.OpenSubKey(@"SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList", true);

            foreach (string Keyname in OurKey.GetSubKeyNames())
            {
                MessageBox.Show(Keyname);
            } 

Этот код работает, но ничего не возвращает (No MessageBox). Есть идеи, почему бы и нет?

ИЗМЕНИТЬ:

Я получил ключи верхнего уровня для загрузки благодаря всем вам, но он показывает только имена папок/ключей (например: S-1-5-21-3794573037-2687555854-1483818651-11661), мне нужно прочитать ключи под эту папку, чтобы увидеть, что такое ProfilePath. Был бы лучший способ сделать это?


person Pandemonium1x    schedule 16.11.2012    source источник
comment
Что вы имеете в виду под ничего не возвращает? MessageBox вообще нет или он появляется, но пустой?   -  person waldrumpus    schedule 16.11.2012
comment
Это Windows NT, а НЕ WindowsNT.   -  person Lloyd    schedule 16.11.2012
comment
Ха Гений. Должно быть, я старею. Это сработало, спасибо!   -  person Pandemonium1x    schedule 16.11.2012
comment
Было бы намного лучше, если бы вы работали над P/Invoking DeleteProfile (то есть официальный API для удаления профиля), а не копаться в реестре.   -  person Damien_The_Unbeliever    schedule 16.11.2012
comment
Интересно, я не знал, что для этого есть API. Возможно, вы изменили весь этот проект для меня.   -  person Pandemonium1x    schedule 16.11.2012


Ответы (2)


Как указал Ллойд, ваш путь должен использовать «Windows NT». В случае сомнений всегда используйте regedit для проверки реестра вручную.

Редактировать: Чтобы продолжить редактирование, вы можете просто GetValue найти ключи, следующий код должен делать то, что вы ищете:

RegistryKey OurKey = Registry.LocalMachine;
OurKey = OurKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList", true);

foreach (string Keyname in OurKey.GetSubKeyNames())
{
    RegistryKey key = OurKey.OpenSubKey(Keyname);

    MessageBox.Show(key.GetValue("KEY_NAME").ToString()); // Replace KEY_NAME with what you're looking for
} 
person emartel    schedule 16.11.2012
comment
@emartel - я получаю эту ошибку Object reference not set to an instance of an object.в этой строке - foreach (string Keyname in OurKey.GetSubKeyNames()). Любая идея, почему я получаю это? - person Simpal Kumar; 05.11.2014
comment
@ Майк, возможно, потому что OpenSubKey не удалось? - person emartel; 06.11.2014
comment
@emartel, да, это значение null ... есть идеи, почему это значение равно нулю? У меня нет прав администратора, может быть в этом проблема. - person Simpal Kumar; 06.11.2014
comment
@Mike Возможно, вам следует взглянуть на stackoverflow.com/questions/13728491/ - person emartel; 06.11.2014

Windows NT

Пожалуйста, не пропустите пробел

person bhuang3    schedule 16.11.2012