카테고리 보관물: troubleshooting

장애 해결

[InnoSetup] MsgBox 일본어 깨짐

문제점

InnoSetup에서 경고창을 띄우기위해 code 섹션에 MsgBox 함수를 호출하는 경우가 있는데 iss 파일에서는 정상적으로 일본어를 입력하였으나 실제 출력되는 내용은 깨진 글자가 출력되는 현상

해결방안

아래 소스와 같이 언어 설정을 하고 커스텀메시지를 추가한다. 추가한 커스텀 메시지를 MsgBox에서 호출하도록 처리하면 일본어 글자가 정상적으로 출력된다.

[Languages]
Name: jp; MessagesFile: "compiler:Default.isl"

[CustomMessage]
jp.CheckError='権限がありません。'

[Code]
procedure InitializeWizard;
begin
MsgBox(ExpandConstant('{cm:CheckError}'), mbInformation, MB_OK);
end;

[InnoSetup] C# WebView 브라우저 버전

[문제점]

폰갭으로 생성한 HTML 파일을 로딩하는 런처를 C#의 WebView Component를 이용하여 개발하였는데 실행 시에 JavaScript 오류가 발생되며 정상적인 동작이 안되는 문제가 발생됨.

[원인]

C#의 WebView는 실행 환경의 최신 IE브라우저를 사용하는 것이 아닌 내장된 브라우저를 사용하기 때문에 버전이 낮아 발생됨.

[해결]

레지스트리 위치

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION\

InnoSetup 을 이용한 인스톨 시점에 Registry 값을 추가해줌으로 문제를 해결 할 수 있음.

주의사항
Windows Vista 이후부터는 64Bit 운영체제의 경우 HKEY_LOCAL_MACHINE의 경로가 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 로 변경됨.

스크립트

[Code]
function InitializeSetup(): Boolean;
var V:String;
var subkey:String;
var ieVersionValue:Cardinal;
begin
    // 현재 브라우저 버전을 조회한다. IE11: 11.0.9600.18015
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Internet Explorer', 'svcVersion', V);

    // 브라우저 버전의 두자리를 가져온다. 11 or 10
    v := Copy(V, 0, 2);      

    subkey := 'SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION';
    ieVersionValue := 11001;
    if v = '10' then
    begin
        ieVersionValue := 10001;
    end;

    // 레지스트리에 쓰고 저장한다.
    RegWriteDWordValue(HKLM, subkey, '{#MyAppExeName}', ieVersionValue);
    Result := True;    
end;