이번 <날개셋> 한글 입력기 5.5의 모든 바이너리들(EXE, DLL, IME)은 구동될 때 자기가 있는 곳과 동일한 디렉터리에서 ngsapp.ini라는 파일을 검색합니다.
메인 커널이라 할 수 있는 NGS3.DLL은 이 파일로부터 글꼴, 도움말 등 각종 부속 파일들이 있는 디렉터리 정보를 얻으며,
기타 응용 프로그램들은 NGS3.DLL 자체를 찾을 위치를 얻어 옵니다.
아래는 ngsapp.ini를 작성한 한 예입니다. [Paths]라는 섹션에다가 항목을 넣으면 됩니다.
[Paths]
Host=.
Font=..\Font
Help=..\Help
Plugin=.
Dic=..\Dic
Sample=..\Samples
CommonData=..
Applet=.
PluginX86=..\win32
AppletX86=..\win32
UserData=.
Host는 다른 응용 프로그램들이 NGS3.DLL을 찾는 경로입니다. 얘네들은 Host만 봅니다.
그 반면 ngs3.dll은 나머지 key들을 봅니다.
Font, Help, Plugin, Dic, Sample은 따로 설명이 필요 없을 것입니다. 디폴트 경로가 윈도우 비스타 기준 ProgramData\Ymsoft\Ngslib이던 바로 거기이죠.
CommonData는 현재는 언어 리소스인 *.mui 파일만 쓰는 공간입니다.
UserData는 바로 imeconf.dat가 저장되는 곳으로, 디폴트 경로는 Users\사용자 계정\AppData\Roaming\Ymsoft\Ngslib입니다.
PluginX86과 AppletX86은 64비트 프로그램이 32비트 바이너리가 있는 곳을 알아야 할 때 사용하며, 현재는 <날개셋> 입력 패드 64비트 버전만이 사용합니다.
만약 <날개셋> 한글 입력기 무설치 배포판을 만든다면, x86과 x64라는 디렉터리에다가 각각 32비트, 64비트 바이너리들을 한데 다 복사해 놓은 뒤, 두 디렉터리에다가 동일한 이 ngsapp.ini를 비치하면 됩니다.
다만 문제가 되는 것은 외부 모듈인 ngsime.ime인데요. 원래 TSF 모듈은 아무 디렉터리에나 있어도 되고 사용자가 수동으로 regsvr32로 등록만 해 주면 되지만, IME 모듈은 반드시 윈도우 시스템 디렉터리에 있어야 합니다. NgsIme.ime가 윈도우 시스템 디렉터리에 있는데 ngs3.dll은 user-defined 경로로부터 읽게 하고 싶으면 시스템 디렉터리에다가도 ngsapp.ini 파일을 만들어서 Path 섹션에다가 Host만 지정을 해 줘야 합니다.
모든 경로에는 상대 경로를 지정할 수 있어서 좋습니다. 그냥 .만 찍으면 해당 모듈이 있는 커런트 디렉터리가 지정되고, .. 를 찍으면 그 모듈이 있는 디렉터리의 부모가 지정됩니다. 그리고 비워 두면 디폴트가 됩니다.
<날개셋> 타자연습도 ngsapp.ini를 아래와 같이 지정해 주면 됩니다.
[Paths]
Host=
LocalData=
GlobalData=
Host는 ngs3.dll을 읽을 위치입니다.
(참고로, 당연한 말이지만, ngs3.dll은 자기가 있는 디렉터리의 ngsapp.ini를 읽어들이지, 타자연습이 있는 디렉터리의 파일을 읽어들이지는 않습니다.)
LocalData는 사용자 계정이 있는 디렉터리입니다.
GlobalData는 컴퓨터 기계에 관계없이 동일한 데이터인 연습글, 도움말 등이 있는 위치입니다.
셋 모두 .만 찍어 주면, 커런트 디렉터리에서 모든 작업이 이뤄지게 바꿀 수 있습니다.
이 기법을 사용함으로써 <날개셋> 한글 입력기 5.5와 타자연습 3.2부터는 굳이 정식 설치하지 않고도 플래시 메모리에서나 어디에서든 바로 간단히 실행할 수 있으며, 한 컴퓨터에 여러 버전을 충돌 없이 동시에 운용할 수가 있습니다.
이번 버전부터는 msvcr71.dll을 제거하는 데 성공한 것도, 프로그램을 더욱 수월하게 배포할 수 있게 해 줬지요.
다만 제가 말씀드리는 것은, 이 기법을 이용하여 프로그램의 무설치 복사 사용이 이론적으로 가능해졌다는 것뿐입니다.
저는 제가 공식 제공하는 msi 파일을 이용한 설치 외에 다른 방법으로 프로그램을 배포하거나 사용하는 것을 권장하거나, 지원하지는 않을 것임을 밝힙니다. 이런 식으로 프로그램 디렉터리를 변경하여 사용하는 건 전적으로 사용자의 재량이며 책임입니다.
Posted by 사무엘