지난 글에
이어 윈도우즈 설치CD에 항상 추가설치하는 파일들을
더하는 방법을 설명한다. 지난번과 마찬가지로
이 글을 읽는 사람은 윈도우즈XP
설치CD를 제작하는 방법을 알고 있다고
전제한다.
설치할 때 레지스트리를 설정하기
폰트나 드라이버들은 파일을 복사한
뒤에 레지스트리를 설정해주지 않으면 제대로 작동하지
않는다. 이를 해결하는 방법으로 자주 사용되는 것은
SVCPACK.INF,
GuiRunOnce, 또는 CMDLINE.TXT등을 이용해서
패키지를 설치하는 것이다. 이 방법 자체는 어떤
패키지이든지 자동으로
설치하는 것을 지원하기만 하면 사용할 수 있는
일반적인 방법이다. 한가지 단점이라면, 설치하는
CD-ROM드라이브 이름을 미리 알 수가 없기 때문에
$OEM$디렉토리를 이용해서 설치패키지를 미리
하드디스크로 복사를 해놓거나, 별로 깔끔하지
않은 방법을 써서 CD-ROM드라이브 이름을 알아내야
한다는 것이다.
대안으로는 지난번에 사용한 방법을 약간 확장하는
방법이 있다. 이 방법을 요약하면 다음과 같다.
- 설치할 파일 압축
- 윈도우즈 유틸리티 makecab.exe를 사용하여 파일을 압축한다.
(반드시 할 필요는 없다.)
I386\DOSNET.INF
편집
- [Files]
섹션에 새 파일이름을 추가한다.
I386\TXTSETUP.SIF
편집
- [SourceDiskFiles]
섹션에 새
파일을 추가한다.
I386\HIVE*.INF
중
적절한 파일을 편집하여 레지스트리에 추가할 내용을
더한다.
마지막에 추가된 부분이 지난번에 비해 늘어난 일이다.
I386
디렉토리를 보면 4개의 중요한
레지스트리 설정 파일들이 있다.
HIVECLS.INF
- HKLM\SOFTWARE\Classes
에 들어가는
설정들. (HKCR
이라는 이름이 더 익숙할 수도 있다.)
HIVEDEF.INF
- HKU\.DEFAULT
에 들어가는 설정들.
HIVESFT.INF
- HKLM\SOFTWARE
에 들어가는 설정들.
HIVESYS.INF
- HKLM\SYSTEM
에 들어가는 설정들.
이 파일들에서 편집을 해야하는 섹션은
[AddReg]
섹션이며
필요에 따라 [Strings]
섹션을
추가적으로 편집할 수도 있다.
[AddReg]
섹션 추가하는 정보는
항상 다음의 형식을 따른다.
key,subkey,value,flag,data
key
, subkey
,
value
, data
는
보통 윈도우즈 레지스트리를 설명할때
쓰는 용어와 같다.(1)
다만, 위의 4개의 파일의 역할상, key
는
HIVEDEF.INF
에서는
HKCU
를, HIVECLS.INF
에서는
HKCR
를 쓰고 다른 두 파일에서는
HKLM
만을 쓴다는 점만 다르다.
subkey
와 value
는
문자열로 취급되므로 항상 큰 따옴표로 감싸주어야 한다.
data
도 문자열의 경우에는 큰 따옴표로
감싸주어야 한다.
flag
은 C언어의 16진수 형식으로 표현되며,
value
의 형을
지정한다.(2)
0x00000000 |
REG_SZ (디폴트값) |
0x00000001 | REG_BINARY |
0x00010000 | REG_MULTI_SZ |
0x00020000 | REG_EXPAND_SZ |
0x00010001 | REG_DWORD |
0x00020001 | REG_NONE |
주의할 점은
flag
은 항상 8자리 16진수로
써야한다는 점이다. 사람이 보기에는 앞의 0은 아무런
의미가 없으므로 생략하는게 쉽지만, 윈도우즈 설치프로그램은
그렇게까지 똑똑하지 못하다.
[Strings]
섹션에 들어가는 정보는 다음의 형식을
따른다.
name = "string"
형식에서 보이는 것처럼
string
은 항상 큰 따옴표로 묶여져 있어야 한다.
이렇게 정의된 name
은 다른 섹션에서 마치 도스
환경변수를 사용하듯이 사용할 수 있다. 예컨대,
[Strings]
myfilename = "Hello, world.txt"
라고 한다면, .INF파일 내에서 %myfilename%
라고
씀으로써 "Hello, world.txt"
를 대신할 수 있다.
예: ASPI 드라이버
CD나 DVD드라이브를 직접적으로 접근하는 프로그램들중 많은
프로그램들이
ASPI 드라이버를 이용한다.(3) 예컨대,
CDEx같은
프로그램은 ASPI 드라이버를 이용하는 것을 우선적으로 지원한다.
이 드라이버를 윈도우즈XP 설치할때 같이 설치하게 만들자.
윈도우즈 XP에 맞는 ASPI드라이버는 두개의 파일만 있으면 된다.
ASPIXP.SYS
WNASPIXP.DLL
ASPIXP.SYS
는
%SystemRoot%\system32\drivers
로 설치되고
WNASPIXP.DLL
는
%SystemRoot%\system32
로 설치된다.
-
설치할 파일들을 드라이버가 인식하는 이름으로 바꾸고 압축한다.
ren ASPIXP.SYS ASPI32.SYS
ren WNASPIXP.DLL WNASPI32.DLL
makecab /D CompressionType=LZX aspi32.sys
makecab /D CompressionType=LZX wnaspi32.dll
이렇게 해서 생긴 aspi32.sy_
와 wnaspi32.dl_
를
I386
디렉토리로 복사한다.
-
I386\DOSNET.INF
를 자신이 사용하는 편집기로 열어서
[Files]
섹션을 찾아 그 아래에 다음을 덧붙인다.
d1,aspi32.sys
d1,wnaspi32.dll
-
I386\TXTSETUP.SIF
를 자신이 사용하는 편집기로 열어서
[SourceDisksFiles]
섹션을 찾아 다음을 덧붙인다.
aspi32.sys = 1,,,,,,,4,0,0
wnaspi32.dll = 1,,,,,,,2,0,0
여기서 "2"는 %SystemRoot%\system32
이고
"4"는 %SystemRoot%\system32\drivers
이다.
자세한 것은 [WinntDirectories]
섹션에 나열되어 있다.
-
I386\HIVESYS.INF
를 자신이 사용하는 편집기로 열어서
[AddReg]
섹션을 찾아 다음을 덧붙인다.
HKLM,"SYSTEM\CurrentControlSet\Services\Aspi32", \
"ErrorControl",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\Aspi32", \
"Type",0x00010001,1
HKLM,"SYSTEM\CurrentControlSet\Services\Aspi32", \
"Start",0x00010001,2
HKLM,"SYSTEM\CurrentControlSet\Services\Aspi32", \
"MatchFlags",0x00010001,0
HKLM,"SYSTEM\CurrentControlSet\Services\Aspi32", \
"ImagePath",0x00020000,"system32\drivers\aspi32.sys"
여기서 줄 끝의 백슬래쉬(\
)는 내용이 다음줄로
계속되는 것을 표시한다. 한줄에 다 집어넣을 수 있으면
백슬래쉬를 써서 여러줄에 나누어 쓸 필요는 없다.(4)
이렇게 하면 ASPI드라이버를 윈도우즈 설치할때 같이 설치하면서
레지스트리도 같이 설정할 수 있다.
한계
여기서 설명한 방법은 드라이버나 폰트같이 사용자가 직접
구동하지는 않는 것을 설치할때 유용하다. 한편, 사용자가
직접 사용하는 프로그램의 경우에는, 단축아이콘도 시작메뉴에
올려놓으면 더 좋겠다. 여기서 설명한 방법만 가지고는
단축아이콘을 시작메뉴에 더할 수가 없다. 이를 위해서는
.INF파일을 사용해야 한다.
다른 한편, 이 방법은 여전히 %systemroot%
밑으로만
설치하는 것만을 지원한다. 이를 벗어나려면 역시 .INF파일을
사용해야 한다.
-------
각주:
1.
혹시라도 모른다면,
regedit의 도움말을 읽어보거나,
Windows XP Registry Guide를
참고하라. 경우에 따라서는 key
대신에
rootkey
라는 용어를 사용하기도 한다.
2.
이외에도 비트매스크가 더 있으나, 이 글의 목적에는
이것으로 충분하다. 이에 대해 더 자세히 알고 싶다면
Windows XP Registry Guide를 참고하라.
3.
Adaptec사는 특별한 이유없이 링크를 수시로 바꾼다.
이 링크도 얼마 지나지 않아서 연결되지 않을 가능성이 높다.
그때에는 aspi_v470.exe
나
aspi_v471.exe
를
검색하면 미러사이트를 찾을 수 있다.
4.
여기서 줄을 바꾸어 쓴 이유는 단순히 티스토리/태터둘즈의
한계로 인해 한줄에 쓰면 내용이 안보이기 때문이며,
실제로 I386\HIVESYS.INF
를 편집할 때에는
한줄에 모두 쓸 수 있다.