2012-10-30 37 views
1

我想從註冊表中讀取並設置一些值,但我不斷收到NullReferenceExceptions。NullReferenceException在RegistryKey

public partial class Form1 : Form 
{ 

    RegistryKey rkApp = null; 
    RegistryKey settings = null; 

    public Form1() 
    { 
     InitializeComponent(); 

     rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
     settings = Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Shit", true); 

     if (settings.GetValue("automove") != null) 
     { 
      automove = true; 
      autostartToolStripMenuItem.Checked = true; 
     } 
    } 
} 

我在這個例子中刪除了一些不相關的代碼,但這是我的代碼...任何想法?

錯誤出現在行,如果(settings.GetValue("automove") != null)

+0

是個例外,從拋出什麼線(檢查從異常'StackTrace') –

+0

如果(settings.GetValue( 「汽車移動」)!= NULL) – Styler2go

+0

是設置空? –

回答

4
Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE\\... 

HKEY_CURRENT_USER蜂巢不包含其名稱以HKEY_LOCAL_MACHINE開始鍵。如果你想從本地機器蜂巢閱讀,你需要更新你的代碼:

Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Shit", true) 

而且,如果任一Wow6432Node鍵不存在(也許你在運行32 ),或者不包含名爲Shit的密鑰,那麼OpenSubKey方法將返回null

0

我這樣修正:

首先,我檢查設置是否爲空。如果設置爲空,那麼我首先創建SubKey。 之後,我重新設置設置變量和evrything是好的。

settings = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Shit", true); 
if (settings == null) 
{ 
    Registry.CurrentUser.CreateSubKey("SOFTWARE\\Shit").Flush(); 
    settings = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Shit", true); 
} 
相關問題