2012-06-15 105 views
1

我遇到了一個問題,試圖讀取Windows服務器2008上的註冊表項。令人費解的是,代碼可以在不同的服務器上工作,這也是2008年,但是R2。我已經檢查並且註冊表項已經存在,並且我以管理員身份運行了該程序。以下是一個代碼示例。 Registry.LocalMachine.OpenSubKey返回的註冊表項爲空。這是一個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; 
+1

上運行32個應用程序有沒有異常拋出? – Arran

+1

你的問題是什麼? – Achim

+0

這是什麼問題?它會拋出一個異常,如果是這樣的話,哪一行是異常? – Chris

回答

3

你還沒有說如果你正在編譯你的應用程序爲32位或64位。

如果您編譯應用程序作爲一個32位的一個,它會被重定向到

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微軟\的Windows \ CurrentVersion \ App路徑...

請檢查是否有正確的密鑰,或者以64位編譯。

2

下面介紹如何打開64位配置單元。

var localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
0

格雷厄姆沃格和湯姆兄弟都是正確的建議的方法。我在使用VS 2013和MSTEST運行單元測試時遇到的一個問題中遇到的兩個問題:

執行通過單元測試從註冊表中讀取的方法時,存在的註冊表鍵在註冊表中始終返回爲空.LocalMachine.OpenSubkey(string,bool)方法。問題在於測試設置使默認處理器架構爲X86,因此在運行測試時,正在讀取Wow6432Node

總結:

VS 2013與MSTEST Windows 7上運行64位

爲了確保測試在64位運行,進入測試 - > TEST設置 - >默認處理器架構和選擇X64

注意:Wow6432Node適用於64位系統