지난 글에 이어 윈도우즈 설치CD에 항상 추가설치하는 파일들을 더하는 방법을 설명한다. 지난번과 마찬가지로 이 글을 읽는 사람은 윈도우즈XP 설치CD를 제작하는 방법을 알고 있다고 전제한다.

설치할 때 레지스트리를 설정하기

폰트나 드라이버들은 파일을 복사한 뒤에 레지스트리를 설정해주지 않으면 제대로 작동하지 않는다. 이를 해결하는 방법으로 자주 사용되는 것은 SVCPACK.INF, GuiRunOnce, 또는 CMDLINE.TXT등을 이용해서 패키지를 설치하는 것이다. 이 방법 자체는 어떤 패키지이든지 자동으로 설치하는 것을 지원하기만 하면 사용할 수 있는 일반적인 방법이다. 한가지 단점이라면, 설치하는 CD-ROM드라이브 이름을 미리 알 수가 없기 때문에 $OEM$디렉토리를 이용해서 설치패키지를 미리 하드디스크로 복사를 해놓거나, 별로 깔끔하지 않은 방법을 써서 CD-ROM드라이브 이름을 알아내야 한다는 것이다.

대안으로는 지난번에 사용한 방법을 약간 확장하는 방법이 있다. 이 방법을 요약하면 다음과 같다.

  1. 설치할 파일 압축 - 윈도우즈 유틸리티 makecab.exe를 사용하여 파일을 압축한다. (반드시 할 필요는 없다.)
  2. I386\DOSNET.INF 편집 - [Files]섹션에 새 파일이름을 추가한다.
  3. I386\TXTSETUP.SIF 편집 - [SourceDiskFiles]섹션에 새 파일을 추가한다.
  4. 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개의 파일의 역할상, keyHIVEDEF.INF에서는 HKCU를, HIVECLS.INF에서는 HKCR를 쓰고 다른 두 파일에서는 HKLM만을 쓴다는 점만 다르다. subkeyvalue는 문자열로 취급되므로 항상 큰 따옴표로 감싸주어야 한다. data도 문자열의 경우에는 큰 따옴표로 감싸주어야 한다. flag은 C언어의 16진수 형식으로 표현되며, value의 형을 지정한다.(2)

0x00000000 REG_SZ (디폴트값)
0x00000001REG_BINARY
0x00010000REG_MULTI_SZ
0x00020000REG_EXPAND_SZ
0x00010001REG_DWORD
0x00020001REG_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로 설치된다.

  1. 설치할 파일들을 드라이버가 인식하는 이름으로 바꾸고 압축한다.
    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디렉토리로 복사한다.
  2. I386\DOSNET.INF를 자신이 사용하는 편집기로 열어서 [Files]섹션을 찾아 그 아래에 다음을 덧붙인다.
    d1,aspi32.sys
    d1,wnaspi32.dll
  3. I386\TXTSETUP.SIF를 자신이 사용하는 편집기로 열어서 [SourceDisksFiles]섹션을 찾아 다음을 덧붙인다.
    aspi32.sys = 1,,,,,,,4,0,0
    wnaspi32.dll = 1,,,,,,,2,0,0
    여기서 "2"는 %SystemRoot%\system32이고 "4"는 %SystemRoot%\system32\drivers이다. 자세한 것은 [WinntDirectories]섹션에 나열되어 있다.
  4. 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"
  5. 여기서 줄 끝의 백슬래쉬(\)는 내용이 다음줄로 계속되는 것을 표시한다. 한줄에 다 집어넣을 수 있으면 백슬래쉬를 써서 여러줄에 나누어 쓸 필요는 없다.(4)

이렇게 하면 ASPI드라이버를 윈도우즈 설치할때 같이 설치하면서 레지스트리도 같이 설정할 수 있다.

한계

여기서 설명한 방법은 드라이버나 폰트같이 사용자가 직접 구동하지는 않는 것을 설치할때 유용하다. 한편, 사용자가 직접 사용하는 프로그램의 경우에는, 단축아이콘도 시작메뉴에 올려놓으면 더 좋겠다. 여기서 설명한 방법만 가지고는 단축아이콘을 시작메뉴에 더할 수가 없다. 이를 위해서는 .INF파일을 사용해야 한다.

다른 한편, 이 방법은 여전히 %systemroot%밑으로만 설치하는 것만을 지원한다. 이를 벗어나려면 역시 .INF파일을 사용해야 한다.

-------

각주:

1. 혹시라도 모른다면, regedit의 도움말을 읽어보거나, Windows XP Registry Guide를 참고하라. 경우에 따라서는 key대신에 rootkey라는 용어를 사용하기도 한다.

2. 이외에도 비트매스크가 더 있으나, 이 글의 목적에는 이것으로 충분하다. 이에 대해 더 자세히 알고 싶다면 Windows XP Registry Guide를 참고하라.

3. Adaptec사는 특별한 이유없이 링크를 수시로 바꾼다. 이 링크도 얼마 지나지 않아서 연결되지 않을 가능성이 높다. 그때에는 aspi_v470.exeaspi_v471.exe를 검색하면 미러사이트를 찾을 수 있다.

4. 여기서 줄을 바꾸어 쓴 이유는 단순히 티스토리/태터둘즈의 한계로 인해 한줄에 쓰면 내용이 안보이기 때문이며, 실제로 I386\HIVESYS.INF를 편집할 때에는 한줄에 모두 쓸 수 있다.

Posted by movsd
,