태그 보관물: c#

[Tool] ILMerge

DLLEXE를 하나의 실행 파일로 만들기

C#을 이용해서 네트워크 테스트용 프로그램을 만들었는데 log4net.dllini-parser.dll 을 참조해서 실행 파일 하나로는 안되는 상황..

테스트 과정을 예상하니

  1. 테스트 프로그램을 USB에서 PC로 복사한다.
  2. 압축된 프로그램을 해제한다.
  3. 해제된 프로그램을 실행한다.

너무 불편할 것 같다는 생각이 들었습니다.

만약 실행 파일만 있다면 2번 과정이 생략되니 훨씬 편할 것 같았습니다.

http://stackoverflow.com/questions/10137937/merge-dll-into-exe

stackoverflow에서는 커맨드라인을 활용한 방법을 소개했는데 만들어보니 정상적으로 실행은 됐는데 실행 파일이 생성되지 않는 증상이 나타났습니다.

결국 ILMergeGUI 버전을 받아 쉽게 처리했습니다.

https://ilmergegui.codeplex.com/

[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;