2010-06-15 92 views
1

我搜索了很多以找到解決方案,但找不到任何具體解決方案。在VB.NET中更改註冊表值

我需要更改存儲在HKEY_LOCAL_MACHINE\SOFTWARE\APP_NAME下的值。使用.NET的註冊表功能是不可能的,因爲它們有嚴格的限制。

下面的片段應該解決我的問題:

Dim regKey As RegistryKey 
Dim ver As Decimal 
regKey = My.Computer.Registry.LocalMachine.OpenSubKey("HKEY_LOCAL_MACHINE\SOFTWARE\APP_NAME", True) 

regKey.SetValue( 「IP」, 「192.168.10.15:18500」) regKey.Close()

不幸的是,我得到一個NullReferenceExeption當我嘗試設置值。

我該怎麼辦?我已導入Microsoft.Win32並且RegistryKey不接受任何構造函數。

+0

Sub-Key是否存在?你也會在哪一行得到異常? – Bobby 2010-06-15 08:47:05

+0

我不認爲子項存在 試試這個 My.Computer.Registry.LocalMachine.OpenSubKey(「SOFTWARE \ APP_NAME」,真) – Anuraj 2010-06-15 08:52:30

+0

您需要首先創造一個子項,然後只可以設定值,而且使確保密鑰在嘗試讀取之前存在,否則它會一再拋出相同的異常 – 2010-06-15 08:58:18

回答

5

刪除「HKEY_LOCAL_MACHINE」,這已經被LOCALMACHINE成員在你的代碼覆蓋。

請注意,此代碼無法在常規Vista或Win7機器上運行,因此無法打開此密鑰以便在啓用UAC的情況下進行寫入。您需要一個需要管理員權限的清單。改爲寫入My.Computer.Registry.CurrentUser。

如果在64位版本的Windows上運行此註冊表,則還有一個複雜因素是註冊表虛擬化。相反,32位程序將讀取HKLM \ Software \ Wow6432Node中的HKLM \ Software鍵並將其寫入HKLM \ Software \ Wow6432Node。

+0

感謝您的回答。這真的是我所期望的,Windows 7導致了這個問題。 我需要以管理員權限運行我的appliaction,因爲密鑰必須存儲在「HKEY_LOCAL_MACHINE」下(這是第三方應用程序)。 – lenniep 2010-06-15 11:51:16

2

該子項是否存在?引用來自MSDN如果請求的鍵不存在,則返回空引用(在Visual Basic中爲Nothing),而不是拋出異常。

+0

子項存在爲舒爾。我用兩種不同的方法來檢查這一點。 – lenniep 2010-06-15 08:58:02

2

我認爲你需要,你需要這樣做:鍵名

regKey = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE",True).OpenSubKey("APP_NAME", True) 
+0

感謝您的回覆。我現在可以存儲密鑰,但在Windows註冊表編輯器中看不到更改。 當我使用我的函數來讀取值,我得到正確的值。使用Windows 7時有什麼不同嗎?我已經在虛擬商店遇到了一些麻煩...... – lenniep 2010-06-15 09:02:40

+0

@mhofer TBH我不確定,它適用於Win XP,但我目前還沒有Win 7盒子來測試它。 – codingbadger 2010-06-15 09:28:37