在VB.NET中更改注册表值

时间:2010-06-15 08:44:38

标签: vb.net registry uac

我已经搜索了很多东西来找到解决我问题的方法,但我找不到任何具体的解决方案。

我需要更改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不接受任何构造函数。

3 个答案:

答案 0 :(得分:5)

从密钥名称中删除“HKEY_LOCAL_MACHINE”,该名称已在代码中的LocalMachine成员中涵盖。

请注意,此代码无法在常规Vista或Win7计算机上运行,​​因此无法在启用UAC的情况下打开此密钥进行写入。您需要一个需要管理员权限的清单。写信给My.Computer.Registry.CurrentUser。

如果您在64位版本的Windows上运行此操作,则还有一个复杂因素是注册表虚拟化。 32位程序将从HKLM \ Software \ Wow6432Node读取和写入HKLM \ Software密钥。

答案 1 :(得分:2)

子密钥是否存在?从MSDN引用:如果请求的密钥不存在,则返回空引用(在Visual Basic中为Nothing)而不是抛出异常。

答案 2 :(得分:2)

我认为您需要这样做:

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