일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- speechAPI
- Android
- 사례관리
- 이행은이미다른
- cmd명령어
- 자바스크립트날짜형식
- webkitrecognition
- 자바스크립트날짜get
- sqlite
- PostgreSQL
- R데이터분석
- 오류종류
- Python
- 장고웹
- 장고웹프로젝트
- 장고
- 자바스크립트수학
- 개발
- 장고프로젝트
- 청소년복지론
- forof문
- 자바스크립트날짜
- 파이썬
- javaScriptError
- 자바스크립트for문
- speechtoText
- 이행은이미다른테이블에속해있습니다
- 다른테이블에속해있습니다
- 안드로이드
- 자바스크립트forinforof차이
- Today
- Total
EMDI는 지금도 개발중
C# : 레지스트리(Registry) 읽기, 쓰기, 삭제 사용방법 using Registry 본문
이번 글에서는 C#에서 레지스트리 클래스를 이용하여 레지스트리 읽기, 쓰기, 관리를 다루는 방법에 대해 알아보도록 합시다.
- 레지스트리란, 마이크로스프트 윈도우 32/64비트 버전과 윈도우 모바일 운영체제의 설정과 선택 항목을 담고 있는 데이터베이스.
1. 레지스트리 편집기 이해하기
레지스트리 편집기는 [시작]→[실행] 에서 regedit을 검색하면 들어갈 수 있다. 레지스트리 편집기에 들어가면 5개의 서브트리로 이루어져 있는 것을 알 수 있는데
트리명 | 내용 |
HKEY_CLASSES_ROOT | 윈도우에서 사용하는 각 프로그램과 파일 확장명 연결에 대한 정보 저장 윈도우의 OLE와 관련된 내용 저장 각 파일과 프로그램간의 연결에 대한 정보가 들어가 있는 부분이다. |
HKEY_CURRENT_USER | 현재 로그인된 사용자에 대한 설정 정보를 저장 로그인된 유저의 개인 환경 설정 및 사용자가 설치한 응용프로그램을 비롯하여 응용프로그램의 우선순위, 화면색상, 보안 접근 허용 여부 등에 대한 정보를 담고 있다. 하위 디렉터리로는 제어판설정, 키보드 레이아웃, 현재 사용자의 소프트웨어 설정 상태 등에 대한 정보 |
- AppEvent : 소리, 이벤트 등 효과음 관련 설정정보 - Console : 제어판에 저장된 설정정보 및 바탕화면 설정내용 저장 - Control Panel : 화면보호기, 테마, 키보드 마우스 설정 정보 - Environment : 윈도우 7이전 세대의 시스템등록정보의 환경변수 저장 - EUDC : 윈도우 7이전세대의 eudc정보 저장 - Identities : 아웃룩, 메신저 등 윈도우 메일프로그램 정보 저장 - Keyboard Layout : 키보드의 정보저장 및 사용자의 사용인 형식 저장 - Network : 네트워크 정보 저장 - Printers : 프린터 연결상황 및 이름, 인쇄용지, 기본설정 정보 저장 - Sessions Information : 윈도우XP에서 사용되는 키로 PC의 작업내용 저장 - Software : Pc에서 사용중이며 설치된 모든 프로그램 변수, 정보저장(64qlxmdlsruddn) - UNICODE Program Groups : 윈도우 7이전의 xp.2000에서 사용되며 유니코드를 사용한 그룹정보 저장 - Volatile Environments : xp.2000에서 사용되며 로그온사용자 정보 저장 |
|
HKEY_LOCAL_MACHINE | 사용 중인 드라이버 정보, 프린터, USB등과 같이 컴퓨터에 설치된 하드웨어 정보를 비롯하여 소프트웨어에 대한 모든 정보가 담겨져 있다. 간단한 레지스트리 편집은 대부분 이곳의 정보를 편집하게 된다. |
-HARDWARE : 수치연산 프로세서, 직렬 포트, 모뎀 등 하드웨어 관련 설정을 저장 - SOFTWARE : 응용 프로그램에서 컴퓨터 단위로 적용하는 설정 데이터를 저장 - SYSTEM : 윈도우 시스템의 부팅과 관련된 설정 데이터를 저장 |
|
HKEY_USERS | 다중 사용자를 지원하는 시스템에서 사용자에 대한 키 항목이 생성되어 해당 환경에 대한 정보가 저장된다. 즉, 이전에 로그인했던 사용자들을 위해 초기화 파일을 보관해 놓는 것이다. 단일 사용자일 경우에는 HKEY_CURRENT_USER동일 |
HKEY_CURRENT_CONFIG | 현재 사용중인 윈도우의 디스플레이 정보와 폰트정보, 프린트 정보 등의 설정 정보가 담겨져 있다. |
2. C#에서 사용해보기
우선 레지스트리 클래스를 이용하려면 using Microsoft.Win32 네임스페이스를 지정해줘야 합니다.
* 아래의 표는 [끝나지 않는 프로그래밍 일기] 라는 블로그를 통해 재정리한 표입니다.
멤버 메서드 | 설명 | 사용방법 |
CreateSubKey | 새 하위 키를 만들거나 기존 하위 키를 엽니다. | RegistryKey rkey = Registry.CurrentUser.CreateSubKey("c# rkey").CreateSubKey("testsubkey"); |
OpenSubKey | 지정된 하위 키를 검색합니다. | RegistryKey rkey = Registry.CurrentUser.OpenSubKey("c# rkey").OpenSubKey("testsubkey"); |
DeleteSubKey | 지정된 하위 키를 삭제합니다. | Registry.CurrentUser.DeleteSubKey(@"c# rkey\qwd"); |
DeleteSubKeyTree | 하위 키와 자식 하위 키를 재귀적으로 삭제합니다. | |
GetSubKeyNames | 모든 하위 키 이름이 포함된 문자열의 배열을 검색합니다. | |
SetValue | 레지스트리 키에서 이름/값 쌍의 값을 설정합니다. | rkey.SetValue("test", "테스트!"); |
GetValue | 지정된 이름과 연결된 값을 검색합니다. | rkey.GetValue("test").ToString(); |
GetValueKind | 지정된 이름과 연결된 값의 레지스트리 데이터 형식을 검색합니다. | |
GetValueNames | 이 키와 관련된 모든 값 이름이 포함된 문자열의 배열을 검색합니다. | |
DeleteValue | 지정된 값을 이 키에서 삭제합니다. | rkey.DeleteValue("test"); |
3. C# 오류체크하기
제가 레지스트리를 가지고 테스트 해보고 싶었던 부분은 바로 [제어판]-[시스템 및 보안]-[전원 옵션]에서 전원단추 정의 및 암호 보호 설정 화면으로 들어가서 빠른 실행하기를 컨트롤 하기. 근데 C#에 배운대로 하다 보니 오류가 발견하더군요..
// Create HKEY_LOCAL_MACHINE registry Key
RegistryKey parentkey = Registry.LocalMachine;
// Open the System
RegistryKey powerKey = parentkey.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Session Manager\Power", true);
MessageBox.Show(powerKey.GetValue("HiberbootEnabled").ToString());
powerKey.SetValue("HiberbootEnabled", 0 , RegistryValueKind.DWord);
위의 내용과 같이 소스를 작성한다음 실행을 해보니 오류가 빡! 일어난 오류는 System.Security.SecurityException '요청한 레지스트리에 엑세스할 수 없습니다'
이게 어찌된 영문이지라고 생각하면서 구글링을 해보니 알고보니 관리자 권한이 없어서 그런거라고 하네요. 그럼 해당 프로젝트에 관리자 권한을 부여하도록 합시다!
관리자 권한 부여는 해당 프로젝트의 속성 또는 Properties를 더블 클릭하면 첫번째 사진과 같이 다양한 속성창들이 보이는데
- 그것들 중에서 [보안]에 들어가서 Clickonce를 체크하고 완전 신뢰 응용프로그램으로 설정합니다.
- 그럼 app.manifest 라는 파일이 생성되는데 그 파일 안의 내용 중
- <requestExcutionLevel level="aslnvoker" ~>라고 지정된 level 부분을 requireAdministrator로 변경하고 저장.
그러고 난 다음 실행해보니 정상적으로 값이 변경되는걸 확인할 수 있었네요~
'언어 > C#' 카테고리의 다른 글
C# : XmlDocument 사용해서 XML 생성 (0) | 2020.03.27 |
---|---|
C# : string to JSON using Newtonsoft.Json (0) | 2020.03.12 |
C# : How to get Remote Desktop Session(RDP) SESSIONNAME ? (0) | 2020.03.12 |
C# : 화면 싱글톤 만들기 : How to make Singleton? getInstance() (0) | 2020.03.12 |
C# : how to get Win32_TerminalServiceSetting information in C# (0) | 2019.11.25 |