2010-06-15 5 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

하위 키가 있습니까? 또한 어떤 라인에서 예외가 발생합니까? – Bobby

+0

내가 ("소프트웨어 \의 APP_NAME"TRUE)을 그 하위 키가 이 My.Computer.Registry.LocalMachine.OpenSubKey을 시도 존재하는 것 같아요 – Anuraj

+0

당신은 단지 당신이 만드는 또한, 값을 설정할 수 있습니다 우선 하위 키를 만들어야합니다 키를 읽으려고 시도하기 전에 그 키가 존재하는지 확인하십시오. 그렇지 않으면 동일한 예외가 계속해서 다시 발생합니다. –

답변

5

제거 "HKEY_LOCAL_MACHINE", 즉 이미 코드에서 LocalMachine 회원에 의해 덮여.

이 코드는 일반 Vista 또는 Win7 시스템에서 작동하지 않으므로이 키를 열어서 UAC를 사용하도록 설정하지 않아야합니다. 관리자 권한이 필요한 매니페스트가 필요합니다. 대신 My.Computer.Registry.CurrentUser에 작성하십시오.

64 비트 버전의 Windows에서 실행하면 레지스트리 가상화가 더 복잡해집니다. 32 비트 프로그램은 대신 HKLM \ Software \ Wow6432Node에서 /로 HKLM \ Software 키를 읽고 씁니다.

+0

답변 해 주셔서 감사합니다. 그것은 내가 예상했던 것입니다. Windows 7이 문제의 원인입니다. 키는 "HKEY_LOCAL_MACHINE"(타사 응용 프로그램)에 저장해야하므로 관리자 권한으로 내 appliaction을 실행해야합니다. – lenniep

2

하위 키가 있습니까? MSDN 따옴표 : 예외를 throw하는 대신 요청한 키가없는 경우에는 null 참조 (Visual Basic의 경우 Nothing)가 반환됩니다..

+0

하위 키가 있습니다. shure 위해. 나는 이것을 체크하기 위해 두 가지 다른 방법을 사용했다. – lenniep

2

나는 당신이이 작업을 수행해야 할 필요가 있다고 생각 : 키 이름에서

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

답장을 보내 주셔서 감사합니다. 이제 키를 저장할 수 있지만 Windows 레지스트리 편집기에서 변경 내용을 볼 수 없습니다. 함수를 사용하여 값을 읽을 때 올바른 값을 얻습니다. Windows 7을 사용할 때 다른 점이 있습니까? 나는 이미 VirtualStore에 몇 가지 문제를 겪었습니다 ... – lenniep

+0

@mhofer TBH 잘 모르겠지만 XP에서는 작동하지만 승 7 박스는 아직 테스트하지 않았습니다. – codingbadger

관련 문제