2011-07-14 102 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 

我只得到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上,只有19個是REG_SZ 2 REG_Binary,1個是REG_DWORD。其中3個不是字符串值。換句話說,你的方法是有缺陷的。 –

回答

1

這是因爲你運行的應用程序爲32位,並且它被重定向到註冊表中的Wow64節點。您需要手動將應用程序更改爲x64/Anycpu或 PInvoke Windows Registry APIs,併爲RegOpenKeyEx中的samDesired傳遞KEY_WOW64_64KEY選項。

編輯:作爲發表一個評論者,如果你不想改變AnyCPU/64,你可以通過KEY_WOW64_64KEY參數到.NET函數,而不訴諸到Windows API爲好。請參閱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