KOROMOON

착한 사마리아인이 되고 싶습니다.

1/18/2019

Active Setup


( 1 ) Active Setup 이란?

Active Setup 은 로그온하는 동안 사용자당 한번 명령을 실행하는 메커니즘임.
Internet Explorer 와 같은 일부 운영 체제 구성 요소에서 처음 로그온하는 새 사용자의 초기 구성을 설정하는데 사용되며 일부 회사의 소프트웨어 배포 시스템에서도 초기 사용자 지정 사용자 환경을 만드는데도 사용됨.



( 2 ) Active Setup 의 필요성

Active Setup 매커니즘이 필요한 이유는 좀더 쉽게 풀이하자면 다음과 같다.
응용 프로그램은 두 가지 유형의 데이터를 사용함.
설치 디렉토리에 있는 파일과 같은 시스템 특정 데이터와 사용자가 응용 프로그램에서 마지막으로 편집한 내용을 기록한 정보와 같은 사용자 특정 데이터임.
컴퓨터 관련 데이터를 설치하는 것은 간단함. C:\Program Files 및 HKEY_LOCAL_MACHINE 에 복사하면 완료됨.

그러나 초기 사용자 구성을 사용자 프로필로 가져오는 방법은 무엇인가?
시스템에 로그온하는 모든 사용자에 대해 초기 구성이 필요하기 때문에 설치를 수행는 사용자의 프로파일에 쓰다면 도움이 되지 않음.
이 문제의 한 가지 해결책은 Active Setup 임.
이것은 기계 특정 데이터와 사용자 특정 데이터를 모두 사용함.
기계 부분은 각각 GUID 로 식별되는 구성 요소 목록으로 구성됨.
사용자 부분은 기본적으로 기계 데이터의 미러이지만 이것이 핵심 포인트이며 새로운 사용자 프로파일에는 존재하지 않음.
사용자가 로그온할 때마다 Active Setup 은 각 기계 부분 구성 요소 GUID 가 사용자 부품에 있는지 여부를 확인함.
그렇지 않으면 구성 요소의 명령이 실행되고 구성 요소의 GUID 가 사용자 파트에 저장됨.
이 경우 현재 사용자 프로필이 이미 초기화되었으며 추가 작업이 필요하지 않음.



( 3 ) Active Setup 실행 시점

Active Setup 은 데스크톱이 나타나기 전에 실행됨.
Active Setup 에 의해 시작된 명령은 동기적으로 실행되어 실행 중인 로그온을 차단함.
Active Setup 은 Run 또는 RunOnce 레지스트리 항목이 평가되기 전에 실행됨.



( 4 ) 원격 데스트톱 세션 호스트 / Citrix XenApp

Active Setup 은 Explorer.exe 에 의해 실행됨. 즉, 쉘 역할을 수행하고 나중에 데스트톱을 표시하는게 Explorer 인스턴스임.
바로 이 이유 때문에 게시된 응용 프로그램에서는 Active Setup 이 작동하지 않으므로 게시된 응용 프로그램을 실행할 때 Explorer.exe 가 시작되지 않음.
세션에서 다음 명령을 실행하여 Active Setup 을 수동으로 트리거할 수 있음. (ex. 로그온 스크립트)

%systemroot%\system32\runonce.exe /AlternateShellStartup



( 5 ) Active Setup 관련 레지스트리

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components
이것은 Active Setup 에 대한 모든 것을 포함하는 루트키임.

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Active Setup\Installed Components
이것은 루트키 하위에 포함되며 중복된 기계키는 사용자 프로파일에 있음.
이 글에서 HKCU Active Setup 키를 "사용자 부분" 이라 명명함.

GUID
Type : registry key
각 구성 요소에는 루트키 하위에 GUID 키가 있음. 기술적으로 이것은 GUID 일 필요는 없지만 GUID 는 고유한 장점이 있음.
각 GUID 는 Active Setup 에서 관리할 하나의 구성 요소를 나타냄. 구성 요소의 수는 제한되지 않으며 실행될 명령의 수에 따라 다름. 구성 요소당 하나의 명령만 가능함. (아래 StubPath 참조)

Default Value
Type : REG_SZ
구성 요소의 선택적 이름임. 이름이 여기에 저장되면 구성 요소의 명령이 실행될 때 활성 설정 사용자 인터페이스 대화 상자에 이름이 표시됨.

IsInstalled
Type : REG_DWORD
가능한 값은 0 과 1 임.
0 - 구성 요소의 명령이 실행되지 않음.
1 - 구성용소의 명령은 사용자당 한번 실행됨. isInstalled 값이 없는 경우 기본값임.

Locale
Type : REG_SZ
구성 용소의 설치 언어를 지정하는 임의의 문자열임. 이 문자열이 사용자 부분에 없거나 기계 부분과 다르면 구성 요소가 실행됨.
Active Setup 은 이 문자열의 특성에 제한을 두지 않으므로 "de" 또는 "en" 뿐만 아니라 "abc" 를 사용할 수도 있음.
일단 실행되면 버전 번호가 사용자 파트에 복사됨.

StubPath
Type : REG_SZ or REG_EXPAND_SZ
Format : 유효한 명령줄 (ex. notepad)
이 구성 요소는 Active Setup 에서 로그온하는 동안 구성 요소가 실행 가능할 경우 실행되는 명령임.

Version
Type : REG_SZ
Format : 4 개의 숫자는 쉼표로 구분됨. (ex. 1,2,3,4)
버전값이 있으면 사용자 부분의 해당 버전이 작거나 없는 경우에만 구성 요소의 명령이 실행됨.
일단 실행되면 버전 번호가 사용자 부분에 복사됨.
구성 요소의 명령을 다시 실행할려면 버전 번호를 늘려야 함.



( 6 ) 나만의 Active Setup 구성 요소 만들기

사용자당 한번 메모장을 실행하는 테스트를 하고자 한다면 아래와 같음.
자신의 Active Setup 구성 요소 키 아래에 두 개의 간단한 레지스트리 값만 있으면 됨.
여기서는 GUID 대신 임의의 구성 요소 이름(KOROMOON)을 사용함.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\KOROMOON]
@="KOROMOON's Active Setup Component"
"StubPath"="notepad"



( 7 ) 주의할 점

Active Setup 은 타임아웃이나 다른 메커니즘을 사용하여 시작된 StubPath 프로세스가 아직 살아있는지 판단함.
즉, Active Setup 에 의해 시작된 프로세스가 중단되면 Active Setup 도 중단되며 전원 스위치를 재시작해도 상황을 쉽게 해결할 수 없음.



참고 사이트 : 
https://helgeklein.com/blog/2010/04/active-setup-explained/



============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기