AppLocale 을 설치하고 나서 설치 프로그램의 한글이 깨지는 현상

출처 : http://openoffice.or.kr/gomme/?p=131#comment-33302

 

얼마전에 게시판에 nudimmud 님이 AppLocale 을 설치한 컴퓨터에서 오픈오피스 설치 프로그램을 실행하면 한글이 깨지는 문제를 알려주셨습니다. 아직 정확한 내용은 파악하지 못하고 있지만 지금까지 밝힌 내용과 나름의 해결책을 정리해 보았습니다.

AppLocale

윈도우 XP 와 같이 유니코드를 기본으로 하는 플랫폼에서 유니코드를 지원하지 않는 응용 프로그램을 실행하면 시스템의 로케일에 따라 유니코드로 변환하게 됩니다. 시스템 로케일은 제어판을 통하여 변경할 수 있으나 변경 후에 재부팅을 해야 하고 시스템의 다른 응용 프로그램에 영향을 미친다는 한계가 있습니다. 이러한 문제에 대한 임시 방편으로 마이크로소프트에서 제공하는 유틸리티가 AppLocale 입니다. 이 유틸리티를 사용하면 시스템의 로케일을 바꾸지 않고 다른 코드 페이지를 사용하는 응용 프로그램을 실행할 수 있습니다.

Application Compatibility Database

AppLocale 을 설치한 후에 Readme 파일을 읽어보니 %SystemRoot%\AppPatch 에 다음 파일들이 설치된다고 나와 있습니다.

  • readme.rtf – This file
  • apploc.exe – The AppLocale applet used to launch the target application
  • alres***.dll – The localized resource files for the AppLocale applet
  • alLayer.dll – AppLocale specific application compatibility engine
  • .Custom\{deb7008b-681e-4a4a-8aae-cc833e8216ce}.sdb – AppLocale engine application database

실제로 C:\WINDOWS\AppPatch 를 살펴보면 readme.rtf 대신 readme.mht 가 있는 것 말고는 특별한 점이 없습니다. 그런데 Custom 디렉토리의 sdb 파일이 눈길을 끕니다. 파일 이름도 이상한 것이 확장자도 생소하고 “AppLocale engine application database” 라는 설명은 모호하기 그지 없습니다. 그래도 database 라니까 안에 무슨 내용이 들어 있는지 궁금합니다. :-) 더군다나 파일의 이름을 바꾸고 설치 프로그램을 실행하면 문제가 발생하지 않습니다. 열쇠는 그 파일안에 있는 것이겠죠?

일단 탐색기를 살펴보니 sdb 파일이 Appfix Package 라고 나와 있습니다. 이 키워드를 가지고 간신히 구글의 도움을 받아서 sdb 파일은 윈도우의 Application Compatibility Database 라는 사실과 이를 살펴보기 위해서는 Windows Application Compatibility Toolkit (ACT) 이 필요하다는 것을 알게 되었습니다. ACT를 설치하고 Compatibility Administrator Tool 을 띄워 여기저기 찍어보다가 Installed Databases 에서 결정적인 단서를 발견하게 됩니다. V~

Windows Installer

윈도우용 오픈오피스 2.0 버전의 설치 프로그램은 두가지로 이루어져 있습니다. 설치 프로그램 자체는 Installer SDK 를 이용하여 작성한 유니코드를 지원하는 프로그램 입니다. 그런데 이를 하나의 파일로 배포하고 사용자가 간단하게 실행할 수 있도록 하기 위하여 NSIS 를 이용하여 하나의 실행 파일로 만들었습니다. 오픈오피스 홈페이지를 통하여 배포하는 이 실행 파일은 유니코드를 지원하지 않습니다. 여기서 한글이 깨지는 부분은 첫번째, 즉 유니코드를 지원하는 설치 프로그램 자체입니다.

이를 염두하고 Installed Database 항목을 살펴보면 재미있는 부분을 발견할 수 있습니다.

clip_image002

지금 문제가 있는 부분이 유니코드를 지원하는 윈도우 설치 프로그램이니까 딱 들어맞는 항목입니다. 그런데, 오른쪽 창의 세부 내용을 보면 PropagateProcessHistory 는 다음과 같이 며느리도 모르게 설명하고 있습니다.

PropagateProcessHistory

This compatibility fix sets the __PROCESS_HISTORY environment variable enabling any child processes to look in their parent’s directory for matching information. This is typically needed when a 32-bit unpacker creates a temporary executable that needs to have a compatibility fix applied to it.

상관이 전혀 없어 보이지만 메뉴에서 Database -> Disable Entry 를 실행하여 “Windows Installer – Unicode” 항목을 비활성화 했습니다. 그러고 나서 설치 프로그램을 실행하니까 짠~ 한글이 제대로 나옵니다. 제대로 된 해결책인지 알수도 없고 왜 그런지 알수는 없지만 일단 제대로 나옵니다. 무식한 감동의 눈물 T.T

Registry Monitor

그렇게 해결책은 찾았습니다만, 사소한 수정을 위해서 23 메가짜리 toolkit 을 깔아야 한다는 것은 빈대 잡으려고 초가 삼간 태우는 격이죠? 혹시 변경 사항이 레지스트리에 저장되는 것이 아닐까 싶어서 Regmon 을 띄워놓고 비활성화/활성화를 하면서 날카롭게 관찰하니 답이 보였습니다. :-)

clip_image004

HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags 에 {6400f…} 키를 만들고 값을 1 로 설정하면 Windows Installer – Unicode 항목을 비활성화 할 수 있습니다. 키 값이 복잡해서 레지스트리 파일을 저장해서 올려 놓았으니 필요하신 분은 내려받아 실행하시면 됩니다.

숙제

Windows Application Compatibility 에 대해서 조금 더 자세한 공부가 필요하겠죠?

Win32에 게시됨. Leave a Comment »

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: