簡體   English   中英

無法讀取注冊表項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM