2017-09-04 16 views
1


에 변화를 찾을 수 없습니다 :C#을 사용하여 레지스트리를 편집하지만 난 다음 코드를 사용하여 C#을 통해 내 레지스트리를 변경 regedit를

RegistryKey regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 
RegistryKey openSubKey = regKey.OpenSubKey(@"SOFTWARE\ASA\Suite", true); 
openSubKey?.SetValue("Password", encryptedString, RegistryValueKind.String); 
openSubKey?.SetValue("UserName", UserNameTextBox.Text, RegistryValueKind.String); 
openSubKey?.SetValue("DomainName", DomainNameTextBox.Text, RegistryValueKind.String); 
openSubKey?.Close(); 
regKey.Close(); 

이러한 항목이 이미 존재 않았고 단지 대체되었다. 같은 종류의 코드를 사용하여 설정을 읽었을 때 올바른 설정을 되 찾을 수 있지만 regedit.exe로 레지스트리를 열고 수동으로 검색하면 이전 값만 찾습니다. regedit.exe에서이 경로는 다음과 같습니다. Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ASA\Suite WOW6432Node없이 (심지어 HKCU에서도) 경로를 조사했지만 ASA 항목이 전혀 없습니다.
그 사람이 어떤 생각을 갖고 있습니까? 왜 제가 변경 한 것을 보지 못합니까? 나는 completly 여기에 의아해하고있다 ...

EDIT : 내 프로젝트를 anyCPU에서 x86으로 바꿨지 만 변경된 내용은 x64로 변경하자마자 regedit.exe에서 보여주는 키가 읽혀졌다. 하지만 레지스트리 하이브의 32 비트 변형을 열어 여기에 무언가를 쓸 때 질문은 계속됩니다 ... 변경 사항을 볼 수없는 이유는 무엇입니까? x64 Windows에서 x86 응용 프로그램은 자동으로 WOW6432Node에 쓰여야합니다. 그렇지 않습니까?

EDIT2 : x86 Windows에서 x86 버전을 테스트했습니다. 레지스트리를 변경하고 읽을 수는 있지만 regedit를 사용하면 변경 사항을 볼 수 없습니다.

EDIT3 : HKCR \ VirtualStore \ MACHINE \ SOFTWARE \ ASA \ Suite에서 변경된 키를 찾았습니다. 왜 그런지 모르지만 나는 대답을 검색하여 여기에 게시합니다.

답변

0

좋아, 대답이 있습니다. 매니페스트를 사용하지 않으려 고했기 때문에 앱을 제거해야하므로 앱을 제거해야하는지 묻지 않았습니다. 따라서 일반 사용자 (로그인 한 사용자가 관리자 권한을 가지고 있음에도 불구하고)가 HKLM에 쓸 수 없으므로 HKCU \ VirtualStore에 키를 썼습니다. 그런 식으로 내 앱이 키를 읽을 수도 있지만 regedit에서 읽을 수 있습니다. exe 그것이 예상되는 곳이 아니 었습니다. 이 해결하기 위해 나는 매니페스트 구현과 requestedExecutionLevel로 라인을 변경 : 이제

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

나는 심지어 64과 86 버전을 구축 할 필요가 없습니다 대신 모든 CPU를 사용하여 내 응용 프로그램이 수행하도록 할 수 있습니다 (즉 : RegistryView.Registry32 또는 RegistryView.Registry64을 사용하는지 살펴보기)

0

다른 사람이 덮어 쓸 수 있습니까? 이게 도움이 될 수 있습니까? http://www.advancedinstaller.com/user-guide/registry-wow6432-node.html

Wow6432Node 레지스트리 항목은 사용자가 64 비트 Windows 버전을 실행 중임을 나타냅니다.

운영 체제는이 키를 사용하여 64 비트 Windows 버전에서 실행되는 32 비트 응용 프로그램에 대해 HKEY_LOCAL_MACHINE \ SOFTWARE의 개별보기를 표시합니다. 32 비트 응용 프로그램이 HKEY_LOCAL_MACHINE \ SOFTWARE \\ 하위 키 아래에 값을 쓰거나 읽으면 응용 프로그램은 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \\ 하위 키를 읽습니다.

레지스트리 반영자는 32 비트 및 64 비트 레지스트리보기 (주로 COM 등록 용) 사이에 특정 값을 복사하고 "마지막 작성자 승"접근 방식을 사용하여 충돌을 해결합니다.

+0

하지만 왜 openSubKey.GetValue (xx)로 값을 읽을 수 있습니까?하지만 regedit에는 표시되지 않습니다. 나는 이것이 대답이라고 생각하지 않지만, 어쨌든 감사드립니다. –