배우는 입장이라 정확하지 않을수 있습니다. 댓글로 지적 해주세요. 확인하는대로 업데이트 할게요 :)
2024.09.05 ~ 2024.09.05 (인턴 5일만에 반차 쓰기~~)
코드를 보고 특정 레지스트리를 업데이트 하는 과제를 받았다.
1일 차에 말씀 하셨듯이 현재 버전을 확인하고 버전이 맞지 않으면 새로운 버전으로 업데이트하는 부분을 구현해야한다고 하셨으니 , 아마 이 부분을 수행 해야하는 것 같다.(아닐수도 있음!!)
우선 레지스트리 편집기를 켜서 변경하고자하는 경로를 찾는다. 본인의 경우 5개의 루트 키 중 LOCAL_MACHINE을 변경해야하기 때문에 그 지점에 찾았다.
레지스트리 란?
운영체제단에서 저장하는 환경변수? 데이터 베이스 같은거라고 보면 된다.
예를 들어 이 파일이 어디서 설치 되어왔고, 어디에 위치하고 어느 버전인지 등등....
레지스트리는 크게 다섯 가지 주요 루트 키로 구성되는 데, 각각
HKEY_CLASSES_ROOT (HKCR): 파일 확장자와 관련된 정보 및 파일 형식과 프로그램 간의 연결 정보 저장
HKEY_CURRENT_USER (HKCU): 현재 로그인한 사용자에 대한 설정과 정보 저장
HKEY_LOCAL_MACHINE (HKLM): 모든 사용자에게 공통적으로 적용되는 하드웨어, 소프트웨어 및 시스템 정보
HKEY_USERS (HKU): 사용자 계정에 대한 정보
HKEY_CURRENT_CONFIG (HKCC): 현재 하드웨어에 대한 정보 저장
이 중에서 나는 HKLM 레지스터리 키를 업데이트하는 과제이다. HKLM은 업데이트 시 관리자 권한을 요구하기 때문에 주의를 요한다
레지스트리를 편집하는 기초적인 코드는 아래와 같다.
import winreg
winreg.ConnectRegistry(computer_name, winreg.루트 키)
#로컬 컴퓨터 또는 네트워크를 통해 원격 컴퓨터의 레지스트리에 연결할 때 사용
# 레지스트리 키를 읽기 전용으로 열기
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\.. 접근할 레지스터리 경로")
## 어떠한 작업들
winreg.CloseKey(key)# 레지스터리 키 닫기.
이제 어떠한 작업들 부분에 대해서 좀더 알아보자
import winreg
winreg.ConnectRegistry(computer_name, winreg.로컬루트 키)
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\.. 접근할 레지스터리 경로")
## 어떠한 작업들
msg, reg_type = winreg.QueryValueEx(key, "ProgramFilesDir")
##
winreg.CloseKey(key)
헷갈리는 함수
winreg.OpenKey() VS winreg.ConnectRegistry()
winreg.ConnectRegistry()
로컬 또는 원격 컴퓨터의 루트 레지스트리에 연결하기 위해 사용
주로 원격 컴퓨터의 레지스트리에 접근하려고 할 때 ,또는 로컬 레지스트리에도 연결 가능
로컬 시스템 또는 네트워크 통해 원격 컴퓨터의 레지스트리에 접근할 때.
winreg.OpenKey()
이미 열려 있는 레지스트리의 루트 키 또는 서브 키에서 하위 키를 열기 위해 사용
로컬 시스템 내에서 레지스트리 키를 열어 해당 키에 접근하고 값 조회, 수정
따라서 주로 Connect(원격과 연) 후에 Open(열어) 해야함
이렇게 코드를 짜면..!!
업데이트 실패가뜬다... UAC프롬프트로 권한을 상승 시키는 방법과 HKLM 대신 HKCU를 이용해 권한을 변경하여 받는 방법이 있는 데 전자를 선택해 파일 전체 수정후 current_user 을 사용하기로 함.
프롬프트에서 권한 인증 받는 것은 이슈가 있을수 있다고 들었음
'인턴 기록' 카테고리의 다른 글
[인턴] 인턴 18일차 변경 코드 컴파일하기 (0) | 2024.09.19 |
---|---|
[인턴] 인턴 8일차 "NSIS Script 수정해서 .exe 파일 수정하기" (0) | 2024.09.11 |
[인턴] 인턴 6일차 .tar 파일 해시 값 확인해서 변조 여부 확인하기 (2) | 2024.09.09 |
[인턴] 인턴 3일차 제품 키 인증 로직 (2) | 2024.09.06 |
[인턴] 인턴 1,2 일차 "NSIS 설치하여 배포 파일 만들기" (0) | 2024.09.02 |