<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
  <title type="html">김 용묵의 절대공간 - 블로그: 날개셋-한글-입력기-개발-관련-썰에 달린 최근 댓글/트랙백 목록</title>
  <id>http://moogi.new21.org/tc/</id>
  <link rel="alternate" type="text/html" hreflang="ko" href="http://moogi.new21.org/tc/" />
  <subtitle type="html">그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.</subtitle>
  <updated>2025-02-26T16:03:06+09:00</updated>
  <generator>Textcube 1.7.8 : Con moto</generator>
  <entry>
    <title type="html">kippler님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1355#comment28635" />
    <author>
      <name>(kippler)</name>
    </author>
    <id>http://moogi.new21.org/tc/1355#comment28635</id>
    <published>2017-05-04T12:07:53+09:00</published>
    <summary type="html">헐... 그냥 인스톨러 이야기 인줄 알았는데, 댓글 보니 인스톨러 만드시나 보네요. 응원합니다. ^^

1. 네, 이 부분은 GetUserDefaultUILanguage() 가 제일 정확한듯 합니다. 저도 어제 궁금해서 여러가지 테스트를 해 봤는데, 영문 OS에 캐나다 언어팩을 설정하면 아래처럼 리턴값이 나옵니다. 한국, 일본, 중국 정도는 1:1 매치가 되어서 딱히 문제가 없는데, 스페인어처럼 다양한 국가에서 쓰이는 언어인 경우 GetUserDefaultUILanguage()를 써야 그나마 복잡도가 덜해 지더군요.
GetSystemDefaultLangID ()        1033 0x409 English ENGLISH_US
GetUserDefaultLangID()           4105 0x1009 English ENGLISH_CAN
GetUserDefaultUILanguage()       2057 0x809 English ENGLISH_UK

2. 생각해보니 W계열 함수가 98에서도 다 작동했던 것 같기도 하고… 오랜만이라 기억이 가물 가물 하네요. (생각해 보니 작동을 하기는 하는데 내부에서 MBCS 로 다시 바꿔서 작동하기 때문에 일부 함수는 버그가 있었던 것 같기도 하고…) ㅎㅎ 어쨌거나 이거 다 고려하면 정말 쉽지 않은 작업이네요.</summary>
  </entry>
  <entry>
    <title type="html">사무엘님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1355#comment28737" />
    <author>
      <name>(사무엘)</name>
    </author>
    <id>http://moogi.new21.org/tc/1355#comment28737</id>
    <published>2017-05-04T21:40:50+09:00</published>
    <summary type="html">1. 아, &amp;quot;인스톨러를 만약 직접 만든다면 아무리 그래도 그렇지 MBCS를 쓰지는 않을 거다&amp;quot;라는 뜻이었습니다. 실제로 직접 만든다는 얘기는 아니고요. 그러기에는 제가 시간과 여유가 부족합니다. ^_^

2. 네, 저도 관련 함수들을 검색하면서 그걸 알게 돼서 호출하는 함수를 교체했습니다.

3. 9x 계열에서 W 계열 함수를 지원하는 건 MessageBoxW, TextOutW, GetTextExtentPoint32W처럼 최소한의 에러 메시지 출력 내지 글자를 찍고 픽셀 크기 측정하는 기본 함수 정도가 전부입니다. 아, 95 말고 98부터는 imm32 관련 함수들도 예외적으로 W를 지원하기 시작했고요. 물론 MessageBoxW는 내부적으로 문자열 변환 후 A를 호출하는 형태입니다.
그러니 9x 시절에는 일반적인 함수들은 A를 써야 하는데 COM 내지 IME 관련 함수들과는 유니코드 문자열을 주고받으니 그게 또 프로그래밍을 골치 아프게 하는 요인이었습니다.</summary>
  </entry>
  <entry>
    <title type="html">kippler님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1355#comment28409" />
    <author>
      <name>(kippler)</name>
    </author>
    <id>http://moogi.new21.org/tc/1355#comment28409</id>
    <published>2017-05-03T13:30:14+09:00</published>
    <summary type="html">오늘도 재미있는 글 잘 봤습니다. ^^
몇가지 사족을 달자면, 

GetUserDefaultLangID() 사용자 언어 설정 값을 가져오고, GetSystemDefaultLangID() 는 시스템 언어 설정을 가져옵니다만, 실제로 NSIS 는 GetUserDefaultUILanguage()를 사용하고 있습니다.
생각난 김에 테스트 해 보았는데, 사용자 입장에서 각각의 값을 바꾸고 방법이 조금씩 다 다르네요.

인스톨러 만들 때 Win9x 지원은 쉽지 않은 문제로 보이네요. 일단 MBCS로 프로그램을 짜면, 언어 선택 화면에 각각의 언어로 언어 선택을 보여주기도 힘들고, 한국어 OS 사용자가 일본어를 선택하면 일본어가 깨지는 등의 문제가 발생하기 때문에 이 부분은 해결이 쉽지 않아 보입니다.

그리고 언급하신 것처럼 NSIS 플러그인 사용할 때 32/64 비트 플러그인 DLL 호출이 자유롭지 못하기 때문에, 작은 외부 exe를 만들어서 플러그인에서 exe 를 호출하는 방식을 종종 사용했는데, 문제가 요즘 AV 프로그램의 휴리스틱엔 진은 덩치 작은 EXE를 너무 심하게 의심하더군요. 간단한 유틸 EXE를 만들어서 설치할 때 호출하는 방식을 선호했는데 나중에 이 문제가 너무 심해서 포기하고 말았습니다.</summary>
  </entry>
  <entry>
    <title type="html">사무엘님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1355#comment28414" />
    <author>
      <name>(사무엘)</name>
    </author>
    <id>http://moogi.new21.org/tc/1355#comment28414</id>
    <published>2017-05-03T14:11:50+09:00</published>
    <summary type="html">소환에 응해 주셔서 대단히 고맙습니다. ^_^

1. 저도 그럼 System 대신에 User을 쓰는 게 낫겠네요. 어쩐지 외국인 중에서 편집기의 대화상자 UI가 한국어로 나오는 걸 문의하는 경우가 종종 있었는데, User는 영어이지만 System이 한국어여서 그런 것 같습니다.

2. 당연히 Win9x 지원한다고 해서 프로그램 기반을 MBCS로 만들지는 않습니다. NT 계열에서는 원래 지원되는 언어 선택 ui가 모두 나오고, 9x에서는 영어 아니면 해당 운영체제 언어(영어가 아닌 경우) 둘 중 하나만 고를 수 있겠지요.

3. 헐.. AV 휴리스틱 문제도 있는지는 몰랐네요. 디지털 서명 해도 막무가내로 의심하는가 봅니다.
하긴, installer가 설치/제거 중에 잠깐 압축 풀어서 실행만 하고, 실제로 사용자의 컴에 설치는 안 되는 용도의 임시 EXE/DLL 및 데이터 같은 개념도 installer 엔진이 정식 지원해야 할 것 같습니다. feature list에 하나 추가입니다. ^^</summary>
  </entry>
</feed>
