[英]Cannot read registry entry
我在嘗試讀取Windows Server 2008上的注冊表項時遇到了一個問題。令人費解的是,該代碼確實在也為2008,但為R2的其他服務器上運行。 我已經檢查並且注冊表項就位,並且我以管理員身份運行了該程序。 下面是一個代碼示例。 Registry.LocalMachine.OpenSubKey返回的注冊碼為null。 這是一個64位應用程序
string strPath = "";
try
{
//The registry key:
//SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SnmpClient.exe
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(strKey))
{
try
{
//InstallDirectory
if (!(rk.GetValue(strValue) == null))
{
strPath += rk.GetValue(strValue).ToString();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return strPath;
您尚未說要將應用程序編譯為32位還是64位。
如果將應用程序編譯為32位應用程序,它將被重定向到
HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Wow6432Node \\ Microsoft \\ Windows \\ CurrentVersion \\ App路徑...
檢查是否也有正確的密鑰,或者以64位編譯。
這是打開64位配置單元的方法。
var localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
格雷厄姆·瓦格(Graham Wager)和湯姆兄弟(Tom Brothers)都正確地建議了這些方法。 我在使用VS 2013和MSTEST進行單元測試時遇到的一個問題,我的2美分:
當執行通過單元測試從注冊表讀取的方法時,存在的注冊表項在Registry.LocalMachine.OpenSubkey(string,bool)方法上始終以null返回。 問題是測試設置使默認處理器體系結構為X86 ,因此在運行測試時,正在讀取Wow6432Node 。
摘要:
VS 2013,MSTEST在Windows 7 64位上運行
為了確保測試以64位運行,請轉到TEST-> TEST設置->默認處理器體系結構,然后選擇X64
注意 :Wow6432Node適用於在64位系統上運行的32位應用程序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.