2009-05-14 11 views
2

私はC#を初めて使い慣れています。私は.NETを使用してレジストリキーを削除するメソッドを作成することに苦労しています。このメソッドは、削除される完全キーを含む1つの文字列パラメータを取ります。私はいくつかの他の反復を試してみましたが、解決策をグーグルしかし、これまでのところ、置くことができなかったしましたC#レジストリキーを削除する方法の作成

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); 

     } 
    } 
} 

:ここで私は(明らかに)問題が解決しない何をしようとしているのサンプルです一緒に作品。どんな助けでも大歓迎です。また、なぜ私のラメの試みが私の知識のギャップを明確にするのに役立たないのかについての説明はすばらしいでしょう。

+0

何OSあなたがこれを試着していますか? –

答えて

2

このルーチンは本当にのように、ワンライナーでなければなりません:

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

Registry.LocalMachineは既にオープンされているため、RegistryKeyオブジェクトを開く必要はありません。

RegistryKeyオブジェクトを開いて別の処理を行う必要がある場合は、RegistryKeyがIDisposableを実装していることに注意してください。オブジェクトが作成されたので、何があっても処分する必要があります。だから、でコードを囲む必要があります。を試してブロックにDispose()を呼び出してください。幸いなことに、これはよりエレガントを使用してを使用してC#でコーディングすることができます。

using(RegistryKey key = Registry.LocalMachine.OpenSubKey(...)) { 
    ... 
} 
2

私はあなたがあまりにも多くを持っていると信じています。これを試してください:

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

私は@コレルが持っていると思います。

しかし、もしあなたがthis form of DeleteSubkeyを使用することですデバッグを支援するための一つの方法:

public void DeleteSubKey(
    string subkey, 
    bool throwOnMissingSubKey 
) 

代わりに一つだけの引数で呼び出して、2番目の引数にtrueを渡し一つで。そうすれば、

...指定されたサブキーが存在しない場合、例外が発生します。

例外はArgumentExceptionです。

関連する問題