レジストリ操作について【.NET】

解決


π+  2004-09-28 14:28:02  No: 116578  IP: [192.*.*.*]

こんにちは!レジストリ操作について質問があります。学校の図書館から.NETの本を借りてきたのですが、Delete valueをつかってvalueを削除することはできたのですが、DeleteSubKeyが削除できなく、使用方法も載っていなく、いろいろ試したのですがどうしてもうまくいきません><
        key = Microsoft.Win32.Registry.CurrentUser
        key = key.CreateSubKey("software\Otameshi\test")
        key.SetValue("TEST", "sample")
        key.Close()
 と設定して、

        key = Microsoft.Win32.Registry.CurrentUser
        key = key.OpenSubKey("software\Otameshi\test", True)

        key.DeleteSubKey("software\Otameshi\test")
        key.Close()
とするとサブディレクトリがみつかりませんとエラーになってしまうのですが何がいけないのでしょうか。key.DeleteValueだとValueは削除できたのですが><

よろしくおねがいします><

編集 削除
π  2004-09-29 22:45:41  No: 116579  IP: [192.*.*.*]

上記コピペですが、
        key = Microsoft.Win32.Registry.CurrentUser
        key = key.OpenSubKey("software\Otameshi\test", True)
        key.DeleteSubKey("software\Otameshi\test")
        key.Close()
の3行目の””内をいくら変えてもサブキーが見つかりませんとなってしまいます、、、ところが2行目ではTrueになっているはずなんですが・・・

Valueはうまくけせたんですがなぜなんでしょうか><

編集 削除
岡田 之仁  2004-09-29 23:36:07  No: 116580  IP: [192.*.*.*]

.NET でレジストリアクセスは行っていませんが・・・
VB6 の折には行っていました。

確か、レジストリの同階層の全てのキーを削除しないと、
サブキーの階層を削除できない仕様だったと思います。

よって、SetValue("TEST","sample") とされていますので、
その"TEST"キーを削除しないと、
key.DeleteSubKey("software\Otameshi\test")
は成功しないと思いますが・・・

※  あくまで実行した結果を確認していませんので・・・

ご確認下さい。

以上。

編集 削除
π  2004-09-29 23:42:24  No: 116581  IP: [192.*.*.*]

返信ありがとうございます><;
"TEST"キーを削除するなど、いろいろ試しましたがうまくいきませんでした><;
.NETでは独自の仕様があるのでしょうか。。。

編集 削除
岡田 之仁  2004-09-30 00:00:19  No: 116582  IP: [192.*.*.*]

試しました・・・

        Dim key As Microsoft.Win32.RegistryKey

        key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\Otameshi\test")
        key.SetValue("TEST", "sample")
        key.Close()

        key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\Otameshi\test")
        key.DeleteValue("TEST")
        key.Close()
        key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\Otameshi")
        key.DeleteSubKeyTree("test")
        key.Close()
        key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software")
        key.DeleteSubKeyTree("Otameshi")
        key.Close()

※  http://dobon.net/vb/dotnet/system/registrykey.html
    ここにも、そのようには記述されていませんでした。
    修正が必要ですネ!〜

以上。

編集 削除
π  2004-09-30 01:14:41  No: 116583  IP: [192.*.*.*]

で、、できました!!!Createから削除するんですね・・・どおりでできないわけです・・。でも私が借りてきた.netの本、「逆引き大全500」にはOpenから削除していたんです><;

私事なのに親切にしてくださってどうもありがとうございました><

編集 削除
π  2004-09-30 01:15:51  No: 116584  IP: [192.*.*.*]

、、Openから削除していたのはValueでしたけど・・

削除する対象でOpenとCreateを使い分けることをしりました・・。

どうもありがとうございました。

編集 削除