2011-07-14 9 views
2

レジストリ値を一覧表示しようとすると、すべての値が表示されません。私がやっているときのように:レジストリ値を一覧表示する際の問題C#

RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); 

foreach (string vName in regKey.GetValueNames()) 
{ 
    Console.WriteLine("Reg values: " + vName); 
} 

私が得る答えはちょうどこれらです:

Reg values: CurrentVersion 
Reg values: CurrentBuild 
Reg values: SoftwareType 
Reg values: CurrentType 
Reg values: InstallDate 
Reg values: RegisteredOrganization 
Reg values: RegisteredOwner 
Reg values: SystemRoot 
Reg values: InstallationType 
Reg values: EditionID 
Reg values: ProductName 
Reg values: CurrentBuildNumber 
Reg values: BuildLab 
Reg values: BuildLabEx 
Reg values: BuildGUID 
Reg values: CSDBuildNumber 
Reg values: PathName 

Iのみ取得する17行時に(私がレジストリに見れば)21行。

私は間違っていますか?すべての答えに大変です。

+1

有効なx64またはx86レジストリキーを読んでいるかどうかを確認してください。 http://stackoverflow.com/questions/6304275/c-reading-the-registry-productid-returns-null-in-x86-targeted -app-any-cpu-wo – Chojny

+0

Windows XPでは、REG_SZ 2 REG_BinaryとREG_DWORDは19のうち17個だけです。それらのうち3つは文字列値ではありません。つまり、あなたの方法に欠陥があります。 –

答えて

1

これは、アプリケーションを32ビットとして実行しているため、レジストリのWow64ノードにリダイレクトされているためです。アプリケーションをx64/Anycpuまたは PInvoke Windows Registry APIsに手動で変更し、RegOpenKeyExにsamDesiredのKEY_WOW64_64KEYオプションを渡す必要があります。

編集:あなたはあなたにも、WindowsのAPIに頼ることなく、.NETの機能にKEY_WOW64_64KEYパラメータを渡すことができAnyCPU/x64のに変更しない場合は、コメント欄で掲載したよう。 C# Reading the registry: ProductID returns null in x86 targeted app. “Any CPU” works fine

+0

ありがとうございました。 Visual C#expressで修正するのはちょっと難しいことです。しかし、ここには答えがあります。http://stackoverflow.com/questions/4104228/change-target-cpu-settings-in-visual-studio-2010-express –

+0

「Registry64」の値は、ターゲティングのときだけ渡すことができます。 Net 4.0。以前のバージョンの.Netフレームワークでは、依然としてP/Invokeが必要です。 – Justin

関連する問題