0

レジストリ キーの値を読み取っています。

Microsoft.Win32.RegistryKey key;
key = *someLongPathHere*;

値をラベルに表示します。

string a = (string)key.GetValue("");//a default value
label1.Text = a;

以下が表示されます。

{F241C880-6982-4CE5-8CF7-7085BA96DA5A}

元の値に存在する最初のアンダースコアを除いて、これはほとんど正しいです。

{_F241C880-6982-4CE5-8CF7-7085BA96DA5A}

なぜそれが起こるのですか?つまり、不足しているアンダースコア?

また、キーを読んだ後、キーなどを閉じる必要はありますか? どうすればいいですか?

4

1 に答える 1

3

アンダースコアを含む文字列値に体系的な問題があるかどうかをテストするのは簡単です。レジストリ エディターでこのような値を作成し、GetValue(). そうすると、C# レジストリ コードでアンダースコアが失われないことがわかります。したがって、問題には他の説明が必要です。

私の推測では、ラベル コンポーネントにアンダースコアが表示されていません。私は C# UI フレームワークにあまり詳しくありませんが、それはもっともらしいようです。aUI のラベル キャプションではなく、デバッガーの下で の値を調べてみてください。

他に考えられることは、x64 で実行されている x86 プロセスがあり、キーがリダイレクトされたキー (HKLM\Software など) の下にあるため、レジストリ リダイレクトがあることです。おそらく、Wow6432Node の下を見ると、アンダースコアの不一致が表示されます。

キーの寿命の管理に関しては、キーは管理されていないリソースによって支えられています。つまり、 Windows HKEY. RegistryKeyクラスが実装するため、キーをステートメントIDisposableでラップする必要があります。using

于 2012-11-23T19:55:01.700 に答える