INF File Architecture
INF file 은 하나 이상의 item 이 포함된 named section으로 이루어 졌으며
이 section의 이름은 대괄호안에 묶이며 각각의 section들은 특정 목적을 지닌다(파일을 카피하거나 레지스트리에 엔트리를 넣는다거나)
INF File Syntax
Internet Component 의 경우 제대로 이해 되기 위해서는 다음의 syntax rule을 따라야 한다.
모든 URL 은 특수 문자를 다루기 위해서 encode 되어야 한다.(URL encode 아시죠,예를 들어 공백은 %20)
http://example.microsoft.com/sample%20control.ocx
Main Sections of an INF File
Internet 에서 다운로드된 component는 [Add.Code]와 [Setup Hooks] section을 찾는다 만약 두개의 section 이 없으면 이 INF file을 standard Win32 INF file 로 가정해 버린다.
[Add.Code] section은 install 되어야 하는 모든 파일을 나열한다.
[Add.Code]
filename1=section-name1
filename2=section-name2
[Setup Hooks] section은 Add.Code에서 file들이 setting되기 전에 실행되어야 할 모든 hook들을 나열한다.
hook= key는 conditional hook 에 이용된다.
[Setup Hooks]
hookname1=section-name4
hookname2=section-name5
hook을 이용하기 위해 inf file에 다음 라인이 필요하다.
[Version]
Signature="$CHICAGO$"
AdvancedINF=2.0
Valid Keys
대괄호 안에 section 이름이 나오고 그뒤에 모든 key 값이 나온다
[section-name1]
key1=value1
key2=value2
다음은 INF file section에서 사용될수 있는 key들이다.
① File-%opersys%-%cpu%=[url|ignore|thiscab]
%opersys% 는 win32와 mac 이 될수 있고 %cpu%는 x86 ,ppc,mips,alpha 가 될수 있다. url은 타겟 operating system고 cpu에 맞는 파일을 가리키고 ,ignore의 경우 현재의 플랫폼에서는 해당 이 필요없다는 것을 나타낸다 Internet Explorer는 플랫폼 독립적인 ‘File=’ Key를 찾기전에 이 key를 뒤진다
② File=[url|thiscab]
File key는 파일이 어디에서 다운로드 될수 있는지를 지정한다. ‘thiscab’의 경우는 INF file이 들어 있는 cab file의 위치를 가르키게 된다.
③ ileVersion=a,b,c,d
File Key가 가르키는 file의 최소 요구 버전 아무 값도 없으면 어떤 버전 이라도 받아들인다.
④ Clsid ={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}
Component의 CLSID값
n DestDir=[10|11]
10일 경우 파일을 \windows directory에 저장되고 11일 경우는 \Windows\System directory에다 두게 된다. 아무값도 없으면 \Cache directory 에 저장된다.
o RegisterServer=[yes|no]
no 로 설정되면 file이 “OleSelfRefister”로 표시되어 있어도 등록 되지 않는다.
Hook Syntax
Component 에 필요한 하나 이상의 install process를 override 하거나 customize하는 방법을 제공한다.
unconditional 방법과 conditional 방법이있는데 unconditional은 항상 실행되고 conditional hook은 특정 조건이 TRUE일 때만 실행된다.
hook=section-name3
특정 CLSID가 가르키는 version이 section에서 명시된 최소요구 version보다 낮다거나,File=이나 File-%opersys%-%cpu%= key가 없다 거나 할 때 component downloader는 custom setup hook을 찾게 된다.
[section-name3]
key1=value1
key2=value2
여러 개의 다른 [Add.Code] section에서 동일한 [Setup Hooks] section을 가르키는 것은 정당한 방법이다.이 방법은 하나의 hook으로 여러 개의 component나 file을 install 할수 있는 방법이다.
Hook section에서 지원하는 key는 다음과 같다.
.File-%opersys%-%cpu%=[url | ignore]
keyword thiscab은 지원되지 않는다 .값을 비워두면 inf 파일이 위치한 cab file을 뒤지게 된다.
.File=[url]
역시 keyword thiscab은 지원되지 않는다 .값을 비워두면 inf 파일이 위치한 cab file을 뒤지게 된다.
.Run=[cmd-line]
cab 파일에서 풀린 여러 파일 들과 함께 temporary directory에서 command line이 실행 되게 된다.
클라이언트 상 의 registry key 값에 바탕을 둔 Win32 INF 을 포함할 수 있다. 이 key가 없으면 Win32 INF hook을 실행시키기 위해 component downloader는 InfFile= 과 InfSection key를 찾게 된다.
.InfFile=[cab file 내에 Win32 INF file 의 이름]
특정 값이 setting 되어 있지 않으면 현재 INF 로 세팅 된다
file 이나 component 를 위한 standard Win32 INF를 이용할 수 있는 방법이다.
.InfSection=[위의 key에 의해 언급 된 InfFile 내의 section 이름]
특정 값이 할당되어 있지 않으면 이 값은 InfFile= key 에 의해 명시된 파일의 [DefaultInstall] section 으로 setting 된다.
When and How Use Hooks
Unconditional Hooks
Unconditional hook은 항상 실행된다. 이 hook은 [Setup Hooks] section에 나열된다.
CODEBASE 는 example_setup.exe,example,ocx,example.inf file을 포함 하는 cab 파일을 가져야 한다.
[Setup Hooks]
hook1=hook1
[hook1]
run=%EXTRACT_DIR%\example_setup.exe /q
[Version]
; This section is required for compatibility on both Windows 95 and Windows NT.
Signature="$CHICAGO$"
AdvancedInf=2.0
Conditional Hooks
Conditional hook은 특정 condition 이 TRUE 로 판정 될 때 만 실행 된다.
[Add.Code]
example.ocx=example.ocx
[example.ocx]
Clsid={...}
hook=hook1
[hook1]
run=%EXTRACT_DIR%\example_setup.exe /q
[Version]
; This section is required for compatibility on both Windows 95 and Windows NT.
Signature="$CHICAGO$"
AdvancedInf=2.0
Code Downloader가 example.ocx section 까지 진행 되면 CLSID 가 등록 되어 있지 않거나 클라이언트 컴퓨터에서 유효하지 않는 다는 것을 알게 되면 hook= key가 지정한 hook1을 실행하게 된다.
Win32 INF Syntax and Variable Substitutions
만약 INF file 에서 [Add.Code] 와 [Setup Hooks] 둘다 없으면 이 INF file을 standard Win32 INF file 로 처리한다.
.EXTRACT_DIR
이 변수는 파일들이 풀린 디렉토리를 가르킨다. command line 의 파라미터로 쓸수 있다.
run=%EXTRACT_DIR%\mysetup.exe
.OBJECT_DIR
Internet Explorer 는 default destination directory 는 Windows 아래에 Downloaded Program Files folder이다 디렉토리 내에서 파일이름의 충돌이 일어난다면 default destination directory 아래 CONFLICT.<n> folder가 생성된다 OBJECT_DIR은 최종 destination directory 를 가르킨다.
Order of Processing and Execution of InF files
[Add.Code] section 은 리스팅 된 순서대로 처리가 된다. 그러나 file 이 indtall 되는 것은 역순으로 처리된다.
INF file 에서 리스팅시에 Main OCX 를 처음에 놓고 다음에 dependent DLLs을 놓아야 한다. 이렇게 하면 dependent DLLs이 먼저 install 되고 다음에 main OCX가 등록 된다.
Unconditional hooks은 [Setup Hooks]에서 리스팅 된 순서대로 실행된다. Conditional Hook의 경우에는 [Add.Code] section의 순서에 따른다
ActiveX 배포시 INF 파일에 대한 설명히 잘 정리 되어 있어 트랙백
출처 : http://urassa.tistory.com/trackback/280
'Programming > Tips' 카테고리의 다른 글
Bitnami Redmine SVN 연결 - Ubuntu VM (2) | 2012.11.06 |
---|---|
c++ import 문과 /MP 스위치 (2) | 2012.10.16 |
RocketDock 항상 위로 세팅 해주는 Utility (2) | 2012.03.14 |
Windows 7 RocketDock 정상적으로 사용하기 (2) | 2012.03.07 |
VC++ 6.0 MFC ActiveX 권한 상승 사용하기 (1) | 2012.02.15 |
NSIS 명령(Command)로 컴파일 하기 (0) | 2012.01.06 |
[VB] - Visual Basic 에서 c/c++ 용 time_t 값 convert, 활용하기 (0) | 2011.12.21 |
iOS5 새로운 기능 리스트 (0) | 2011.10.12 |