2017-06-09 211 views
1

まず、この質問は他のユーザーと同様に表示されることを認識しています。しかし、これまでの私の研究では、私が直面している特定の問題に対する解決策は見出されておらず、同様の状況の問題に対する解決策がたくさんありました。レジストリキーを削除する方法:「サブキーが存在しないため削除できません」というエラーが表示される

私は機能をレジストリに新しいですので、私は彼らと周りの混乱へのVMを使用して、私は何ができるかを見てきました。現在、サブキーとHKEY_CURRENT_USERの作成、読み取り、その後の削除をテストしようとしています。現時点では、私は削除以外のすべてのことをそのリストで行うことができます。

//This first sample will attempt to create a test key under HKEY_CURRENT_USER 
     Console.WriteLine("Creating subkey under HKEY_CURRENT_USER"); 
     RegistryKey testKey2 = Registry.CurrentUser.CreateSubKey("SubKeyTester"); 
     Console.WriteLine("testKey2 is now assigned to {0}", testKey2); 

     //This ensures that testKey2 is the value that I think it is 
     Console.WriteLine("testKey2 value = {0}\n", testKey2); 
の出力と

:HKEY_CURRENT_USERの下にサブキーを作成

テストを始めて...

testKey2が今HKEY_CURRENT_USER \ SubKeyTesterに割り当てられている

testKey2次のように関連するコードです値= HKEY_CURRENT_USER \ SubKeyTester

注目すべきは、testKey2が保存された「HKEY_CURRENT_USER \ SubK私が期待していた "SubKeyTester"ではなく、 これ以降、HKEY_CURRENT_USERの下にあるサブキーを確認し、Yes、 "SubKeyTester"がCurrentUserサブキーの間に実際に存在することを確認できます。さて、私はそれを削除する必要があります。次のように私のコードは次のとおりです。

//This portion of the test will attempt to delete SubKeyTester from 
     //HKEY_CURRENT_USER 
     Console.WriteLine("Attempting to delete test subkey\n"); 
     try 
     { 
      Registry.CurrentUser.DeleteSubKeyTree(testKey2.ToString()); 
      Console.WriteLine("Target has been deleted\n"); 
     } 
     catch(Exception e) 
     { 
      Console.WriteLine("The key targeted for deletion... is not found.\nError: {0}\n", e); 
     } 

     //Another safety check to verify that only SubKeyTester has been deleted 
     Console.WriteLine("There are {0} subkeys under {1}.", 
      Registry.CurrentUser.SubKeyCount.ToString(), Registry.CurrentUser.Name); 
     foreach (string subKeyName in Registry.CurrentUser.GetSubKeyNames()) 
      Console.WriteLine(subKeyName); 

     testKey2.Close(); 

出力は私を知らせる: 「エラー:System.ArgumentExceptionのは:サブキーが存在しないため、サブキーツリーを削除することはできません。」 次に、testKey "SubKeyTester"を含むHKEY_CURRENT_USERの下にあるすべてのサブキーを一覧表示します。

私はこの問題は、ちょうどDeleteSubKeyTreeコールでそのサブキーへのパスをハードコーディングすることによって解決できると信じて、私はそれを避けたいです。むしろ、単にパラメータとしてtestKey2を呼び出し、そのようにキーを削除することができます。それを行う方法はありますか?

答えて

0

私のエラーが見つかりました。正しい軌道に乗っていました。正しいコードは次のとおりです。

Console.WriteLine("Creating subkey under HKEY__CURRENT_USER\n"); 
    const string testKey2 = "SubKeyTester"; 
    Registry.CurrentUser.CreateSubKey(testKey2); 

このように、testKey2は常に "SubKeyTester"です。次に、必要な変更は、削除関数のパラメータだけです。

Registry.CurrentUser.DeleteSubKeyTree(testKey2); 

ToString()メソッドを削除します。

は私がtestKey2だけではなく、「SubKeyTester」の「HKEY_CURRENT_USER // SubKeyTester」になったことを、言ったように問題だったと信じています。しかし、この方法では、testKey2は適切なキーへの正しいファイルパスを可能にする "SubKeyTester"しか取得しません。

私は、パス・エラーを回避するために

Registry.DeleteSubKeyTree(testKey2.ToString()); 

を使用してみましたが、単純に動作しませんでしたように、「レジストリ」、DeleteSubKeyTreeメソッドを持っていません。どのキーが今まで開かれなかったため

また、このソリューションは、.close()ステートメントを必要としません。

+0

誰かがより良い答えを知っていれば、私の答えはさておき、自由に投稿してください。私は確かに学ぶことを喜んでいる! – MrSpudtastic

関連する問題