'설치'에 해당되는 글 2건

  1. 2007.01.25 윈도우즈 설치CD에 파일 더하기 (2) by movsd
  2. 2007.01.15 윈도우즈 설치CD에 파일 더하기 (1) by movsd

지난 글에 이어 윈도우즈 설치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
,

윈도우즈를 몇달 사용하고 나면 다시 설치하는건 이제는 일상이다. 보안이나 안정성과는 거리가 먼 제품을 판매하는 마이크로소프트 비난하기도 이제는 지겹다. 어차피 피할 수 없다면, 매번 추가설치하는 파일들을 윈도우즈 설치시에 같이 설치하도록 해서, 손이라도 좀 덜 가게 만들자.

여기서 소개할 방법은 윈도우즈XP 설치CD를 제작하는 방법을 알고 있다는 전제하에 설명할 것이다. 설치CD 제작 방법을 모르면 링크된 사이트의 설명을 먼저 이해해야 한다.

간단한 경우

가장 간단한 경우는 복사만 하면 되는 경우이다. 예컨대, 윈도우즈 파워토이의 tweakui.exe는 실행파일 하나로 구성되어 있으며 프로그램 자체의 설정을 위한 레지스트리를 사용하지 않는다. 이런 경우는 원하는 디렉토리로 파일을 복사하도록만 해주면 되겠다.

널리 사용되고 있는 방법은 $OEM$디렉토리를 사용하는 방법이다. 예컨대, TweakUI의 경우에는 tweakui.exe만 있으면 따로 설치할 필요가 없다. 이를 %systemroot%\system32 (통상 C:\windows\system32)로 설치해서 사용하려면, 설치 CD의 루트 디렉토리로부터 $OEM$\$$\system32디렉토리를 만들고 그 안에 tweakui.exe를 복사하면 된다. 이 방법의 장점은 첫째 매우 간단하며 둘째 디렉토리 구조를 자유롭게 설정할 수 있다는 점이다. 단점은 설치프로그램이 파일을 있는 그대로 복사하므로 압축을 하기가 애매해진다는 것이다. (물론 실행파일 압축을 할 수도 있지만, 실행파일 압축은 꼭 필요한 경우가 아니면 피하는게 좋다.)

윈도우즈 설치정보를 편집하는 방법

다른 방법은 CD의 I386 디렉토리에 설치하고자 하는 파일을 넣는 방법이다. 이 방법의 장단점은 $OEM$디렉토리구조를 이용하는 경우와 정반대이다. 지금 다루는 경우에만 한정해서 보면 이 방법은 불필요하게 복잡하고 제약적이지만, 뒤에 설명할 다른 경우들과 공통되는 부분이다.

이 방법은 다음과 같이 요약할 수 있다.

  1. 설치할 파일 압축 - 윈도우즈 유틸리티 makecab.exe를 사용하여 파일을 압축한다. (반드시 할 필요는 없다.)
  2. I386\DOSNET.INF 편집 - [Files]섹션에 새 파일이름을 추가한다.
  3. I386\TXTSETUP.SIF 편집 - [SourceDisksFiles]섹션에 새 파일을 추가한다.

예: tweakui.exe%systemroot%\system32로 설치

  1. 설치할 파일을 다음과 같이 압축한다.
    makecab /D CompressionType=LZX tweakui.exe
    위의 명령을 실행하고 나면 tweakui.ex_라는 이름으로 압축된 파일이 생긴다. 이를 I386 디렉토리로 복사한다.
  2. I386\DOSNET.INF를 자신이 사용하는 편집기로 열어서 [Files]섹션을 찾아 그 아래에 다음을 덧붙인다.
    d1,tweakui.exe
    [Files]섹션은 여러개가 있을수 있다. 여러개 중에 어느곳에 덧붙이더라도 상관없다. 또는, 새로 [Files]섹션을 만들어도 된다. 예컨대, I386\DOSNET.INF파일의 맨 밑에
    [Files]
    d1,tweakui.exe
    라고 덧붙여도 된다.
  3. 마지막으로 I386\TXTSETUP.SIF를 자신이 사용하는 편집기로 열어서 [SourceDisksFiles]섹션을 찾아 다음을 덧붙인다.
    tweakui.exe = 1,,,,,,,2,0,0
    [SourceDisksFiles]섹션도 여러개가 있을 수 있으며, 새로 하나 만들어도 된다. 위에서 "2"는 %systemroot%\system32이다. 각 디렉토리의 번호는 I386\TXTSETUP.SIF[WinntDirectories]섹션에 나열되어 있다.

긴 파일이름 처리

설치CD 자체는 긴 파일이름을 지원하나, I386디렉토리 안의 파일들은 도스의 8.3형식을 지키고 있다. 긴 파일이름을 써야하는 경우에는 I386\DOSNET.INF에는 8.3형식의 이름을 넣고 I386\TXTSETUP.SIF 에는 8.3형식의 이름과 긴 파일이름을 넣는다.

예를 들어, programwithlongname.exe라는 가상의 프로그램이 있다고 해보자. 이를 8.3형식에 맞추기 위해 progwlnm.exe라고 CD에 저장하나 설치후에는 다시 programwithlongname.exe로 이름을 바꾸려고 한다. 이 경우는 다음과 같이 처리한다.

  1. 이름을 바꿔 압축
    ren programwithlongname.exe progwlnm.exe
    makecab /D CompressionType=LZX progwlnm.exe
    이렇게 해서 생긴 progwlnm.ex_I386디렉토리로 복사한다.
  2. I386\DOSNET.INF[Files]섹션에는 8.3형식의 이름을 추가
    d1,progwlnm.exe
  3. I386\TXTSETUP.SIF[SourceDisksFiles]섹션에는 8.3형식의 이름으로 앞에서와 같은 내용을 쓰고 난 뒤, 맨 뒤에 쉼표를 찍고 긴 파일이름을 덧붙인다.
    progwlnm.exe = 1,,,,,,,2,0,0,programwithlongname.exe

제한과 확장

여기서 설명한 DOSNET.INFTXTSETUP.SIF를 편집하는 방법을 약간 더 확장하면 레지스트리도 설치할때 설정할 수 있다. 이에 대해서는 다른 글에서 설명한다.

여기서 설명한 방법의 결정적인 제약은 %systemroot% (통상 c:\windows)와 그 서브디렉토리만으로 설치가 가능하다는 점이다. 이를 해결하는 방법은 .INF파일을 이용하는 방법이 있다. 이에 대해서는 또 다른 글에서 설명한다.

Posted by movsd
,