GMT (Greenwich Mean Time) : 그리니치 평균시(또는 그리니치 표준시)

런던을 기점으로 하고, 웰링턴에 종점으로 설정되는 협정 세계시의 기준시간대이다.

1972년 1월 1일부터 1970년 1월 1일을 기점으로 하는 협정 세계시(協定世界時, UTC)를 공식 표현으로 쓰지만 아직도 영국 BBC 방송을 중심으로 GMT란 표현은 널리 쓰이고 있다.

 

출처: https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A6%AC%EB%8B%88%EC%B9%98_%ED%8F%89%EA%B7%A0%EC%8B%9C

UTC (Coordinated Universal Time/Universal Time Coordinated) : 협정 세계시

1972년 1월 1일부터 시행된 국제 표준시이다. UTC는 국제원자시 윤초 보정을 기반으로 표준화되었다.

UTC는 그리니치 평균시(GMT)에 기반하므로 GMT로도 불리기도 하는데, UTC와 GMT는 초의 소숫점 단위에서만 차이가 나기 때문에 일상에서는 혼용된다. 기술적인 표기에서는 UTC가 사용된다.

 

출처 : https://ko.wikipedia.org/wiki/%ED%98%91%EC%A0%95_%EC%84%B8%EA%B3%84%EC%8B%9C

KST (Korea Standard Time) : 한국 표준시

대한민국 조선민주주의인민공화국의 표준시로, 동경 135도를 기준으로 하여 UTC보다 9시간 빠른 표준시(UTC+09:00)이다. 이는 일본 표준시와 같다. 일광 절약 시간제는 사용하지 않고 있다.

예)
UTC가 2021년 12월 25일 오전 9시 라면,
KST는 2021년 12월 25일 오후 6시가 된다.

 

출처 : https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD_%ED%91%9C%EC%A4%80%EC%8B%9C

PHP에서 KST로 시간 표시하는 방법

PHP에서 별도의 시간대를 설정하지 않으면, "date" 명령을 사용했을 때 UTC 시간대가 출력된다.

이를 KST(한국 표준시)로 표시하기 위한 방법은 3가지가 있다.

1. php.ini에서 디폴트 시간대를 설정

php.ini 에서 아래와 같이 timezone을 설정한 후, 웹 서비스를 재시작하면 "date" 명령 사용 시 한국시간이 표시된다.

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Asia/Seoul

2. PHP 코드에서 설정

PHP 코드에서 아래와 같이 디폴트 시간대를 설정할 수 있다.

이렇게 하면 스크립트의 모든 date 함수 호출 시 한국시간이 표시된다.

<?php
date_default_timezone_set('Asia/Seoul');
echo date("Y-m-d H:i:s");
?>

https://www.php.net/manual/en/function.date-default-timezone-set.php

 

3. 디폴트 타임존이 UTC인 상태에서, 일시적으로 한국 시간으로 변경하고 싶은 경우

DateTime 객체에 setTimeZone(new DateTimeZone('Asia/Seoul')을 해주면 한국 시간으로 변경된다.

<?php
$dt = new DateTime('now');
echo 'UTC time : ' . $dt->format('Y-m-d H:i:s');
echo "\n";

$dt->setTimeZone(new DateTimeZone('Asia/Seoul'));
$dtKST = $dt->format('Y-m-d H:i:s');
echo 'KST time : ' . $dtKST;
?>

원격지원이란?

원격 지원(遠隔 支援, Remote Support)이란 특정 사람 혹은 단체에게 일정 거리 이상 멀리 떨어진 온라인 상에서 소수 또는 다수의 공급자가 서비스나 용역을 제공하는 것을 말한다.

 

출처: <https://ko.wikipedia.org/wiki/%EC%9B%90%EA%B2%A9_%EC%A7%80%EC%9B%90>

 

원격지원 소프트웨어란(Remote Desktop Software)?

컴퓨터를 별도의 클라이언트에서 원격으로 실행하는 것을 허용하는 소프트웨어나 운영체제 기능.

개인용 컴퓨터의 데스크탑 환경이 하나의 시스템(일반적으로 PC이지만 개념은 서버에도 동일하게 적용됨)에서 원격으로 실행되는 동시에 별도의 클라이언트 장치에 표시되도록 하는 소프트웨어 또는 운영 체제 기능이다.

software or operating system feature that allows a personal computer's desktop environment to be run remotely on one system (usually a PC, but the concept applies equally to a server), while being displayed on a separate client device.

 

출처: <https://en.wikipedia.org/wiki/Remote_desktop_software>

 

원격지원의 목적

1. 내 컴퓨터를 원격에서 제어하기 위한 목적 (장소에 상관 없이 내 컴퓨터/회사 컴퓨터에 접속하기 위한 용도)

2. 불특정 다수의 다른 사람들 컴퓨터를 제어하기 위한 목적 (고객지원 용도)

 

같은 원격지원 기술을 이용하지만, 위 두 경우는 용도가 다르다. 따라서 원격지원 솔루션 업체마다 두 가지를 다른 상품으로 판매하는 경우들이 있다. (일반적으로 1번이 조금 더 저렴하다.)

 

원격지원 소프트웨어 비교

검색해보면 원격지원 소프트웨어들이 굉장히 많다.

 

팀뷰어, 알서포트(리모트 ), 애니데스크, 프리모, Iperius 리모트, VNC 연결, Ammy.y Admin, ThinVNC, UltraVNC, 스플래시탑(SplashTop), 리모트(국내), 이지리모트(국내) 등등...

 

그 중 고객지원 용도로 사용할, 대표적인 4가지를 비교해보고자 한다.

4가지 모두 기본적인 원격지원 기능은 잘 갖추어진듯 하여, 결국은 가격/기타 편의성 등이 관건일듯 싶다.

 

결론은 (내 개인적인 생각),

  • 무난한 것은 팀뷰어
  • 가격 상관 없이, 아시아에 최적화된 프로그램을 찾는다면 리모트콜
  • 저렴한 것을 찾는다면 애니데스크나 수프리모
    • 방화벽 등록을 해야 하는게 문제가 안된다면 애니데스크(일단 한글지원이 된다, 연결이 팀뷰어보다 훨씬 편하다)
    • 방화벽에서 자유로운 상품을 찾는다면 수프리모(근데 영어다..)
  • 근데.. 써볼수록 애니데스크가 팀뷰어보다 편한 느낌도 든다.. 일단 연결할때 비밀번호 안불러도 되는 것이 엄청 큰 메리트! 연결에 부담이 없고 빠르다.
  팀뷰어(TeamViewer) 알서포트
리모트콜(RemoteCall)
애니데스크(AnyDesk) 수프리모(Supremo)
특징 - 세계에서 가장 많이 사용되는 제품
- 애니데스크나 수프리모에 비해 기능이 조금 더 많은듯
- 아시아 1위
(아시아 환경에 최적화)
- 팀뷰어에 비해 가벼움
- 가입하지 않아도 사용 가능
- 원격 연결 요청 > 상대방의 '승인' 버튼 클릭이면 연결이 됨
- 방화벽 등록 필요 없음
파일전송 가능 O O O O
원격재부팅 가능 O O O O
한국어 지원 O O O X
기타 - 해킹이슈?
- 첫 실행 시, 라이센스 동의창이 뜸
- 비쌈 - 첫 실행 시, 방화벽 등록창이 뜸 => '허용' 눌러주면 됨.
(사실 '허용' 누르기 전에도 이미 원격이 연결되어 상대방 컴퓨터가 보임)
- 첫 실행 시, 라이센스 동의 창이 뜸(중간에 password 넣는 부분이 있어 뭐지? 하고 당황하게 됨) => 그냥 Accept 눌러주고 실행 가능
제작사 국가 독일 한국 독일 이탈리아
가격 42,900원/월
(연단위 결제만 가능)
>> 약 52만원/년
130,000원/월
(월단위 결제 가능)
>> 약 156만원/년
19.9달러/월
(연단위 결제만 가능)
>> 약 29만원/년
178유로/년
(분기별, 연단위 결제 가능. 분기별 결제시 가격이 더 올라감)
>> 약 25만원/년
무료정책 비상업용 무료
(but 라이센스 잘 막힘..)
14 무료 체험 비상업용 무료
(팀뷰어보다 완화된 정책)
비상업용, 비정기적 사용 무료

Direct : 사용자가 브라우저에 URL을 직접 타이핑해서 들어오거나, 북마크를 이용해 들어오는 경우

 

Referral : 다른 사이트에 링크된 우리 사이트의 주소를 클릭해서 들어오는 경우

 

Search : 검색엔진에서 검색된 결과를 클릭해 들어오는 경우

  • Organic Search : 검색엔진에서 자연 검색 결과를 클릭해서 들어오는 경우 (non-paid search)
  • Paid Search : 검색엔진에서 광고를 클릭해서 들어오는 경우 (via pay-per-click ads)

Social : 주요 소셜 채널에서 링크를 클릭해 들어오는 경우 (ex. 페이스북, 트위터, 인스타그램, 링크드인 등)

 

Email : 이메일 안의 링크를 클릭해 들어오는 경우

 

Display : 배너광고 등 광고를 클릭해서 들어오는 경우

 

참고 사이트 : https://insights.quiet.ly/blog/understanding-traffic-sources-google-analytics/

개발한 소프트웨어를 웹에 배포하여 사용자가 다운받아 설치하게 하거나, 백신 프로그램에 오탐지 되는 경우들을 위해, 소프트웨어에 코드사인(인증서로 서명)을 진행한다.

코드사인이란?

software에 디지털 서명(전자 서명)을 해서, 제작자 확인 및 프로그램이 변조되지 않았다는 것을 보장하는 것.

코드사인 인증서란, 설치하려는 프로그램이 신뢰할 수 있고 안전하다는 사실을 공인된 인증기관으로부터 입증받은 디지털 서명

코드사인을 하는 이유

  1. 윈도우의 스마트스크린 필터에서 자유로워지기 위해
    • 웹에서 다운받은 프로그램을 실행 시, 명성치가 쌓이기 전까지 스마트 스크린 필터에 걸린다. (블루스크린이 뜨면서 위험한 파일이라고 실행하지 말라는 경고가 나온다.)
      => 프로그램이 바뀌면 매번 명성치를 다시 쌓아주어야 한다.
      => 경험상 약 30회정도 다운로드를 하고 개발자 센터에 신고를 하면 바로 명성치 반영이 되어 필터에 안걸리는 듯 하다. (평균 약 1일 소요)
    • 코드사인을 하면, 해당 서명에 기반해 명성치가 쌓이게 되어 프로그램이 바뀌어도 명성치를 이어받을 수 있게 된다. (프로그램이 바뀔때마다 매번 명성치를 다시 쌓기 위해 다운로드 할 필요가 없음)
      => 경험상 서명에 기반한 명성치를 쌓아 필터에 안걸리게 되는 데 까지는 약 200회 정도 다운로드가 필요한 것이 아닌가 추측한다. (30회로는 안되었음.. 개별 파일보다 명성치를 쌓는 기준이 더 높은듯 싶다.)
  2. 백신 프로그램에 오탐지되는 경우를 위해
    • 신규 소프트웨어가 백신 프로그램에 오탐지 되는 경우, 백신회사에 연락하여 탐지 제외 처리를 해주어야 한다.
    • 이 역시 매번 프로그램이 바뀔때마다 다시 해주어야 하는데..
      코드사인을 하면 인증서 기반으로 탐지 제외 처리가 되어 한번만 처리 해주면 이후 같은 인증서로 서명한 프로그램은 오탐지 되지 않는다. 

알면 간단한데, 처음 하는 경우 이것저것 찾아 헤맬 수 있어서 정리글을 올려본다.

코드사인 하는 전체 과정

1. 인증서 구매

  • 인증서는 공인된 인증기관에서 구매하여 사용한다.
  • Sectigo(Comobo), digicert, ssl.com, VeriSign, Symantec 등.. 업체들이 굉장히 많다. 그 중 한군데를 선택하면 된다.
    • Warranty 등의 조건에 따라 가격이 달라지는데.. warranty 필요 없으면 저렴한 것을 구매해도 될 듯 싶다.
    • Windows 스마트 스크린 필터를 바로 해제해 준다고 EV 인증서라는 걸 팔기도 하는데.. 가격이 그냥 코드사인 인증서의 거의 3배다... 너무 상술이 심한듯...
    • 일반 코드사인 인증서 구매해서 약 200회정도 다운로드 하니 명성치가 쌓여 스마트 스크린 필터에 안걸리더라.. (물론 추정치라 정확하진 않음.. 두 번 할게 아니라 검증을 해보지 못했음..)
      급하지 않다면 일반 인증서 구매해서 명성 쌓아도 될듯 하다.
  • 나는 개인적으로 Sectigo 인증서를 발급받았다. 국내에는 한국정보인증이라는 곳에서 구매 대행을 하는 듯 한데, 해외 대행 사이트를 이용하면 훨씬 저렴하다. (영어가 되면 채팅상담을 통해 도움을 많이 받을 수 있다.)
    • 국내 대행업체 통하면 165,000/년 이었는데, 해외 대행 사이트를 이용해 $85/년 에 구매했다.(구매 시점 기준)
    • 구매 신청을 하고 필요 서류들을 전송하면, 심사를 거치고 verification call을 받고 나서 인증서를 발급받을 수 있다. (약 1~2주 소요되는 듯)
    • 구매한 곳 링크(홍보 아님.. 필요하신 분만 참고): https://comodosslstore.com/codesigning.aspx

2. 인증서 발급

  • 인증기관마다 발급 방식이 조금 다른 것 같은데.. 메일로 보내주는 곳도 있는 듯 하고.
  • 내가 구매했던 곳은 링크를 타고 들어가 브라우저를 통해 인증서를 발급받았다.(윈도우 운영체제에서는 IE만 사용 가능했음)
  • 발급 과정은 안내가 자세히 나오니 따라하면 된다.

3. 프로그램에 코드사인 적용하기

  • Signcode.exe 라는 프로그램을 사용해 코드사인을 한다. (GUI / Command line 방식 둘 다 지원)
    • Signcode.exe는 Microsoft Windows SDK (7 또는 8.1 또는 10)를 설치하면 같이 설치된다.
    • 코드사인 인증서 구매한 곳에서 제공 하거나, 아니면 아래 링크를 통해 구할 수 있다.
    • https://www.comodokorea.co.kr/support/guide02

4. Command line 방식으로 코드사인 하기

매번 따라하기 귀찮으니.. 아래 명령을 배치 파일로 만들어놓으면 편하다.

코드사인 방법

1) 서명 프로그램 실행

SIGNCODE.EXE -spc [파일.spc] -v [파일.pvk] -n [프로그램이름] -i [부가설명 URL] -t [타임스탬프서버 URL] [사인할파일명]

// Example.bat
SIGNCODE.EXE -spc cert.spc -v my.pvk -n "MyProgram" -i https://www.myprogram.com -t http://timestamp.comodoca.com/ "D:\program\mypgoram.exe"

2) 개인키 패스워드 창이 나오면 암호 입력하면 됨

3) 서명 완료됨 (에러가 나는 경우는 '코드사인 에러 테이블' 참고)

 

순서는 간단한데.. spc 파일과 pvk 파일은 무엇이고 어디에 있는가?? 이걸 준비하는 과정이 아래와 같다..

코드사인에 필요한 파일 준비 과정

코드사인 인증서를 발급받았으면, 인증서로부터 SPC와 PVK 파일을 만들어 내야 한다. (인증기관에 따라서는 인증서와 함께 spc 파일을 보내주는 곳도 있는 듯 하다.)

  • SPC 파일이란?
    • OpenSSL 또는 Microsoft의 .NET Framework 파일 서명 도구 (Signcode.exe)와 같은 다양한 PKCS (공개 키 암호화 표준) 프로그램에서 생성 된 디지털 인증서. 개인 키를 사용하여 암호화 된 공개 키가 포함 된 디지털 서명이 포함되어 있다.
    • SPC 파일은 다운로드 된 파일 및 기타 웹 정보를 디지털로 서명하고 인증하는 데 사용된다.
  • PVK 파일이란?
    • 개인 키 파일이다. 소프트웨어 개발자가 디지털 서명 응용 프로그램에 사용되며, 키를 작은 파일에 암호화 된 데이터의 세그먼트로 저장하고, 최종 사용자가 애플리케이션 번들을 인증 할 수 있도록 한다.

아래는 인증서가 저장소에만 설치되어 있는 경우, SPC와 PVK를 만들어 내는 과정이다.

 

1) 브라우저를 이용해 인증서를 PFX 파일로 내보내기

  • IE 실행 > 설정 > 인터넷 옵션 > 내용 > [인증서] 클릭 > 코드사인 인증서 선택 > [내보내기] 클릭
  • [예, 개인키를 내보냅니다] 에 체크 > 다음 

  • 개인 정보 교환 - PKCS #12(.PFX) 선택 (옵션은 기본으로 두면 된다.)

  • [암호]에 체크 후, 암호를 입력 후 [다음] 클릭

  • 내보낼 파일을 저장할 경로와 이름을 입력 후 [다음] 클릭 > [마침] 클릭하면 인증서가 PFX 형식으로 저장된다.
  • 이제 pfx 에서 spc와 pvk를 만들어내면 된다. 
  • OpenSSL이 있어야 한다. 없는 사람은 미리 설치. 

2) PFX 에서 PVK 파일 만들어내기

PFX 파일에서 개인키를 PEM 포맷으로 추출한다. (패스워드를 물으면, 입력한다.)

openssl pkcs12 -in PFX_FILE -nocerts -nodes -out PEM_KEY_FILE​

PEM 개인키를 PVK 포맷으로 변환한다. (PEM passphrases를 물으면, 서명할때 사용할 패스워드를 입력한다.)

// OpenSSL 0.9.8 series:
pvk -in PEM_KEY_FILE -topvk -out PVK_FILE

// OpenSSL 1.x series:
openssl rsa -in PEM_KEY_FILE -outform PVK -pvk-strong -out PVK_FILE

 

3) Software Publisher’s Certificate (SPC) 파일 만들어내기

PFX 파일에서 인증서를 추출한다.

openssl pkcs12 -in PFX_FILE -nokeys -out CERT_PEM_FILE

인증서를 SPC 포맷으로 변환한다.

openssl crl2pkcs7 -nocrl -certfile CERT_PEM_FILE -outform DER -out SPC_FILE

 

변환 예

// PVK
openssl pkcs12 -in my_pfx_file.pfx -nocerts -nodes -out rsa.pem
openssl rsa -in rsa.pem -outform PVK -pvk-strong -out mykey.pvk

// SPC
openssl pkcs12 -in my_pfx_file.pfx -nokeys -nodes -out cert.pem
openssl crl2pkcs7 -nocrl -certfile cert.pem -outform DER -out cert.spc

참고 사이트 : http://www.pkipartner.support/codesign-converting-a-pfx-file-to-spc-and-pvk-files/

 

PVK, SPC 파일이 준비 되었으니, 이제 코드사인을 진행하면 된다.

SIGNCODE.EXE -spc [파일.spc] -v [파일.pvk] -n [프로그램이름] -i [부가설명 URL] -t [타임스탬프서버 URL] [사인할파일명]

 

길고 긴 코드사인 여정이 끝났다..

알고 나면 쉬운데, 모를 땐 한참 찾아보고 삽질을 해야 한다. 언제나 그렇듯...

나의 기록이 누군가에겐 도움이 되길 바란다.

1. QTextBrowser에 이미지 넣기

QTextDocument에 addResource로 이미지를 추가하고,

내용에서 <img> 태그로 이미지를 넣어주면 된다.

QTextDocument doc = new QTextDocument;
QPixmap pm(":/data/icons/png/new.png");
doc->addResource(QTextDocument::ImageResource, QUrl("new.png"), pm);
doc->setHtml("<img src='new.png'/>");
ui->textBrowser->setDocument(doc);

2. 이미지를 옆의 텍스트에 맞춰 수직 정렬(vertical align)하기

분명히 Qt 공식 사이트에 vertical-align 속성이 있는데.. img 태그에 해당 속성을 넣어줘도 정렬이 안된다... 버그인듯...

vertical-align baseline | sub | super | middle | top | bottom Vertical text alignment. For vertical alignment in text table cells only middle, top, and bottom apply.

 

꼼수로, 테이블을 만들어 이미지와 텍스트를 한줄에 넣어주면 정렬이 되네...

QString text = QString("<table width='100%'>"
              "<tr>"
              "<td><img src='new.png' style='vertical-align:middle;'/></td>"
              "<td><h2> Title</h2></td>"
              "</tr>"
              "</table>";
ui->textBrowser->document()->setHtml(text);

QTextBrowser, QTextEdit에 스타일 적용하는 방법

1. 컨텐츠 자체에 style 속성 설정하기

QTextBrowser나 QTextEdit에 들어가는 내용을 html로 작성하고, 해당 요소마다 style을 설정해준다.

QString content = "<h2 style='color:red; font-weight:bold; margin-top:25px; margin-bottom:25px;'>제목</h2>"
                  "<p style='font-size:12pt; color:#4e4e4e;'>내용입니다...</p>";
ui->textBrower->setText(content);

QTextBrowser나 QTextEdit에서는, 모든 HTML 요소가 지원되지는 않는다. Qt에서 지원하는 요소와 속성들만 스타일 설정이 가능하다.

* 지원되는 HTML Subset

https://doc.qt.io/qt-5/richtext-html-subset.html

 

Supported HTML Subset | Qt GUI 5.15.7

Supported HTML Subset Qt's text widgets are able to display rich text, specified using a subset of HTML 4 markup. Widgets that use QTextDocument, such as QLabel and QTextEdit, are able to display rich text specified in this way. Using HTML Markup in Text W

doc.qt.io

2. CSS Stylesheet 적용하기

CSS style을 정의한 후, textBrowser의 defaultStyleSheet으로 지정해 준다.

QString sheet = "h1 {font-size:24pt; margin-top:25px; margin-bottom:25px;} "
                "h2 {font-size:22pt; margin-top:25px; margin-bottom:25px;} "
                "h3 {font-size:20pt; margin-top:25px; margin-bottom:25px; font-weight:bold; color: #21313e; } "
                "h4 {font-size:18pt; margin-top:25px; margin-bottom:25px;} "
                "h5 {font-size:16pt; margin-top:25px; margin-bottom:25px;} "
                "body {font-size:14pt; color:#4e4e4e;}"
                "ul li {margin-top: 10px; margin-bottom: 10px; color: #4e4e4e;}";
ui->textBrowser->document()->setDefaultStyleSheet(sheet);

* Qt stylesheet 참고

https://doc.qt.io/qt-5/stylesheet.html

3. 컨텐츠 중간에 가로선 넣기

내용 중간에 <hr/> 태그를 넣어주면 가로선이 생긴다.

QString content = "<h2 style='color:red; font-weight:bold; margin-top:25px; margin-bottom:25px;'>제목 1</h2>"
                  "<p style='font-size:12pt; color:#4e4e4e;'>내용입니다...</p>"
                  "<hr/>"
                  "<h2 style='color:red; font-weight:bold; margin-top:25px; margin-bottom:25px;'> 제목 2 </h2>"
                  "<ul><li>내용 1</li> <li>내용 2</li></ul>;
ui->textBrower->setText(content);

4. 하이퍼링크 클릭하면, 외부 브라우저에서 열리게 하기

링크를 클릭하면 브라우저를 실행해서 해당 링크가 열리게 하는 방법

: 내용에 a 태그로 링크를 넣어주고, setOpenExternalLinks(true); 설정을 해준다.

QString content = "<a href='https://www.google.com/'>구글 바로가기</a>";
ui->textBrower->setText(content);
ui->textBrowser->setOpenExternalLinks(true);

3초 후 자동으로 사라지는 메시지 박스 띄우기

timer를 만들어서, timeout시 메시지 박스 close 함수를 호출하게 하면 된다.

 

C++ 코드 : 

    QMessageBox msgBox(QMessageBox::Information, tr("title"), tr("message..."), QMessageBox::Ok, this);
    QTimer timer;
    timer.singleShot(3000, &msgBox, &QMessageBox::close);
    msgBox.exec();

 

Python 코드:

from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5.QtCore import Qt, QTimer

def showMessage():
    msg = QMessageBox(QMessageBox.Information, "title", "text", QMessageBox.Ok, None, Qt.WindowStaysOnTopHint)
    timer = QTimer()
    timer.singleShot(3000, msg.close)
    msg.exec()

import sys

def start():
    app = QApplication(sys.argv)
    showMessage()
    sys.exit(app.exec_())

if __name__ == '__main__':
    start()

NSIS로 스크립트를 작성해 인스톨러를 컴파일 하는 중에, "Internal compiler error #12345" 라고 나오며 컴파일이 완료되지 않는 경우가 있다.

원인:

NSIS 기본 인스톨러 사이즈가 2G로 설정되어 있어, 이를 넘어가는 크기의 인스톨러를 만들려고 하면 위와 같은 에러가 나온다.

혹은, 디스크의 저장 공간이 부족한 경우에도 위 에러가 나올 수 있다고 한다.

해결책:

nsisbi

2G 제한을 없애고 8G까지 인스톨러를 만들 수 있도록 수정한 바이너리가 소스포지에 올라와 있다.

간단히 해당 바이너리로 교체해서 사용 가능하다. (NIS Editor를 사용하고 있다면, makensis.exe 경로를 바꿔주면 된다.)

https://sourceforge.net/projects/nsisbi/

 

nsisbi

Download nsisbi for free. NSISBI aims to remove the current 2GB limit found in NSIS. NSISBI aims to remove the current 2GB limit found in NSIS. This version adds support for using a separate file for storing the install data, therefore allowing installer s

sourceforge.net

WinImage plug-in

또는, WinImage plug-in을 사용해도 가능하다고 한다.

다만 이 플러그인은 unicode만 지원하고, 어드민 권한을 요구한다고 한다고 해서 사용해 보진 않았다..

https://nsis.sourceforge.io/WimImage_plug-in

 

WimImage plug-in - NSIS

Links Plugin package: WimImage_plugin.zip (44 KB) Forum thread Description This plugin is designed to remove the current 2GB limit in NSIS by creating and extracting images contained in .wim files that are separate to the installer. Thanks to the Wim API b

nsis.sourceforge.io

 

+ Recent posts