2014-09-23 67 views
0

我有一個名爲system_module的窗體應用程序。我希望它啓動與Windows。這是我的代碼。無法在C中設置註冊表值#

private void Form1_Load(object sender, EventArgs e) 
    { 

     string keyName = @"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
     using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true)) 
     { 
      if (key == null) 
      { 
       // Key doesn't exist. 
       key.SetValue("system_module", "Application Location"); 
      } 
      else { } 
     } 
    } 

但這不是創造運行/我已經搜索整個註冊表,並沒有發現任何提及system_module除了一些無關痛癢的值的值 。

P.S我不太瞭解註冊表的東西。對不起,如果我的術語是錯誤的。希望你明白我想要的。 我在這個網站的其他一些問題中找到了上面的代碼。我不知道爲什麼這不起作用。

+2

'如果(鍵== NULL) {key.SetValue ...}'是一個壞主意。如果不存在,則添加它,但不要設置不存在的鍵的值。 – Dirk 2014-09-23 11:30:00

+0

我認爲Setvalue會創建密鑰,如果它不存在。非常感謝你。 – 2014-09-23 11:37:48

+1

它會拋出一個NullReferenceException,因爲你不能調用一個不存在的對象的方法。 – Dirk 2014-09-23 11:45:16

回答

1

你不使用的SetValue() - 因爲 「運行」 - 密鑰存在

使用:

if (key != null) 
     { 
      // Key doesn't exist. 
      key.SetValue("system_module", "Application Location"); 
     } 

和處理的關鍵== NULL太添加的Run鍵(默認此註冊表項存在)

如果你不想修改的關鍵,如果你的「system_module」,「應用程序位置」已經存在,你要查詢的「鑰匙」下的值

+0

好的。我現在明白了。謝謝。我還有一個問題。 setvalue()是否更新值(如果存在)? – 2014-09-23 11:38:54

+0

@EmpereurAiman - 是SetValue()更新值! - 順便說一句:PLZ標記這個答案作爲解決方案,如果它幫助你 – Cadburry 2014-09-23 13:57:46