C # Проблема создания метода для удаления раздела реестра - PullRequest
2 голосов
/ 15 мая 2009

Признаюсь, я новичок в C #. Я борюсь с созданием метода для удаления раздела реестра с помощью .NET. Метод принимает один строковый параметр, который содержит полный ключ для удаления. Вот пример того, что я пытаюсь сделать, но это не работает (очевидно):

namespace NameHere
{
    class Program
    {
        static void Main(string[] args)
        {
            RegistryKey hklm = Registry.LocalMachine;
            hklm = hklm.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\")
        string strKey=”Test123”;
string fullPath = hklm + "\\" + strKey;
            deleteRegKey(fullPath);  
        }

        static void deleteRegKey(string keyName)
        {

            Registry.LocalMachine.DeleteSubKey(keyName);

        }
    } 
}

Я пробовал несколько других итераций и гуглил решения, но пока не смог собрать воедино. Любая помощь будет принята с благодарностью. Кроме того, любое объяснение, почему моя неудачная попытка не помогает прояснить мой пробел в знаниях, было бы здорово.

Ответы [ 3 ]

2 голосов
/ 15 мая 2009

Эта процедура действительно должна быть однострочной, как:

Registry.LocalMachine.DeleteSubKey (@ "SYSTEM \ ControlSet ... \ etc ...");

Вам не нужно открывать объект RegistryKey, потому что Registry.LocalMachine отчасти уже открыт для вас.

Если вам нужно открыть объект RegistryKey, чтобы сделать что-то еще, знайте, что RegistryKey реализует IDisposable, поэтому теперь, когда вы создали объект, вы несете ответственность за его удаление независимо от того, что. Таким образом, вы должны окружить ваш код try {...} и вызвать Dispose () в блоке finally . К счастью, это можно кодировать в C # более элегантно, используя , используя :

using( RegistryKey key = Registry.LocalMachine.OpenSubKey(...) ) {
    ...
}
2 голосов
/ 15 мая 2009

Я полагаю, у вас их слишком много. Попробуйте это:

RegistryKey hklm = Registry.LocalMachine;
hklm = hklm.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\")
string strKey=”Test123”;
string fullPath = hklm + strKey;
deleteRegKey(fullPath);  
1 голос
/ 15 мая 2009

Я думаю, что у @Correl есть.

Но один из способов отладки - использовать эту форму DeleteSubkey :

public void DeleteSubKey(
    string subkey,
    bool throwOnMissingSubKey
)

вместо того, который вы вызываете только с одним аргументом, и передаете true в качестве второго аргумента. Таким образом, если

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

Исключением, которое вы получите, будет ArgumentException .

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