블로그 이미지
pgmr이상현
Instagram:sh_lee77 머신비전, YOLO, 영상처리, Deep Learning, 딥러닝

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2024. 2. 20. 16:16 Project

안녕하세요, 이상현입니다.

 

Inno Setup을 이용하여, 여러 프로젝트를 패키징하여 설치 해보는 도중에,

정말 도움이 될만한 정보가 있어 공유드립니다.

 

Installer로 어떠한 프로젝트를 설치 및 제거시에 이미 프로그램이 실행중이라면,

프로세스를 종료하고 설치하라는 에러 메세지가 나오는 경우가 발생할 것 입니다.

 

보통은
[Code] 섹션에 Taskkill을 통해서 아래와 같이 실행중인 프로세스를 종료시킬 것입니다.

function InitializeUninstall: Boolean;
var
ErrorCode: Integer;
begin
      ShellExec('open', 'taskkill.exe', '/f /im {#MyAppExeName}','',SW_HIDE,ewNoWait,ErrorCode);
      
      Result := True;
end;      

function InitializeSetup: Boolean;
var
ErrorCode: Integer;
begin
      ShellExec('open', 'taskkill.exe', '/f /im {#MyAppExeName}','',SW_HIDE,ewNoWait,ErrorCode);
      
      Result := True;

end;

 

그런데, 이렇게 함에도 불구하고 일반적으로 실행한 프로세스가 아닌,

관리자 권한으로 실행중인 프로세스는 종료되지 않을 것 입니다.

 

이때 프로세스를 종료하기 위해서 정말 많은 자료를 찾아봤지만, 가장 간단하고 강력한 방법을 소개 드리겠습니다.

 

[Setup] 섹션에

CloseApplications=force

위 한줄만 추가해주더라도 Installer로 설치중에 관리자권한으로 실행중인 앱을 닫을 수 있게됩니다.

 

정말 간단하게 끝날 수 있는 문제를 몇시간을 할애 했네요.. ㅎㅎ

 

구글링을 해보더라도 한글 자료는 찾지 못했었는데,

이 글을 찾아 보시는 분들은 조금이라도 편하셨으면 해서 포스팅 해봅니다.

 

감사합니다.

 

 

 

posted by pgmr이상현
2023. 11. 30. 14:39 Project

 

안녕하세요, 이상현입니다.

 

지난 포스팅에서는 Packaging이 필요한 이유에대해서 언급했습니다.

 

이번 포스팅에서는 실질적으로 Inno Setup을 사용해서, 직접 Packaging을 하는 방법을 적어보겠습니다.

 

1. Inno Setup 설치

 - Inno Setup Version : 6.2.2
 - Environment : Windows10

 - 다운로드 링크

 

2. Inno Setup Compiler 실행

 

 3. Inno Setup Script Wizard

 

1) Create a new Script File Using the Script Wizard

- Create a new Script File Using the Script Wizard 체크 후 하단 OK 버튼 클릭

 

2) Welcome to the Inno Setup Script Wizard

- 하단에 Next버튼 클릭

- Create a new empty script file은 체크하지 말고 넘어가자.

  체크하면 스크립트 작성을 도와주지 않고, 빈 파일이 생성됨

 

3) Application Information

- EXE 어플리케이션 정보의 이름을 정해준다.

- Version 정보를 작성한다 ex) 1.1

- Application Website 주소를 작성한다 ex) 회사 홈페이지 주소

 

 

4) Application Folder

- Installer로 어플리케이션을 설치했을 때 설치될 장소 즉, 경로를 지정한다

- 해당경로에 생성될 폴더 네임을 작성한다.

 

5) Application Files

- 패키징할 디렉토리 안에 exe 파일을 선택한다

- Add folder 버튼을 눌러 패키징할 dll, exe등이 있는 폴더를 선택해 모든파일을 불러온다.

 

6) Application File Association

-Next를 눌러 넘어간다.

 

7) Application Shortcuts

-EXE바로가기에 대한 옵션 창이다. Next를 눌러 넘어간다.

 

8) Application Documentation

- License file이 있다면 넣어주자.

- 설치전 안내할 정보

- 설치후 안내할 정보

 

9) Setup Install Mode

- Installing시에 설치 권한 Admin은 관리자권한으로 설치

- Non adminstative는 일반 설치

 

10) Setup Languages

- 기본적으로 English(영어) 언어가 있지만, 한국어는 없다.

- 일단 English로 선택하고 넘어간다. 다 완료후에 아래 절차를 진행한다.

- 한국어를 적용하려면 Inno Setup Translations (jrsoftware.org) 에서 Korean.isl을 다운받는다.

- 그후 InnoSetup Languages 디렉토리에 해당 파일을 넣어준다. 본인의 경로는 아래와 같다.

  c:\Program Files (x86)\Inno Setup 6 \Languages

- 그후에 스크립트 파일에 [Language] Section에 아래 코드를 작성한다.

   Name: "Korean"; MessageFile: "compiler:Languages\Korean.isl"

 

11) Compiler Settings

- Installer파일이 생성될 경로

- Installer 이름, 아이콘, 패스워드 정보를 기입한다. 패스워드는 없다면 공란

 

12) Inno Setup Prepocessor

- 체크 박스 체크 시 Script에 #define 전처리기가 들어가서 스크립트 작성 시 편리함

 

4. Script 작성

- 앞에서 설정했던 Script Winzard를 통해서 바로 Installer를 만들 수 있도록 윤곽이 나온다.

- 기능을 추가하고싶다면 해당 스크립트에 추가할 기능을 구글링을 통해서 작성하면 된다.

- 한국어 설정의 경우에 설치 시 위에 설명을 써놓았으니, 그대로 진행하면된다.

- 해당 스크립트 상단에 삼각형 재생버튼을 누르면 바로 컴파일되어, 앞서 지정했던 인스톨러 파일이 저장되는 위치에

  Setup파일이 저장된다.
- 해당 파일을 Installing하면 해당 패키징한 파일들이 설치될 경로에 설치가되며 끝난다.

- 이후 내가 개발한 프로그램이 정상작동하는지 테스트 해보면 끝이다.

 

 

5. 유용할만한 Script 추천

 

ㅇ 한국어 설정

- 한국어를 적용하려면 Inno Setup Translations (jrsoftware.org) 에서 Korean.isl을 다운받는다.

- 그후 InnoSetup Languages 디렉토리에 해당 파일을 넣어준다. 본인의 경로는 아래와 같다.

  c:\Program Files (x86)\Inno Setup 6 \Languages

- 그후에 스크립트 파일에 [Language] Section에 아래 코드를 작성한다.

   Name: "Korean"; MessageFile: "compiler:Languages\Korean.isl"

 

ㅇ제어판 프로그램 추가/제거에서 보이는 프로그램 아이콘 설정

[Setup]   <ㅡ Setup 섹션에 작성해야함

UninstallDisplayIcon={app}\{#MyAppExeName}

 

ㅇ 인스톨링 시 우측 상단에 작은 이미지

- 꼭 bmp파일이여야 하며, 일정 Size로 만들어야함. 해당 해상도는 Inno Setup홈페이지 참고

 

[Setup]   <ㅡ Setup 섹션에 작성해야함

WizardSmallImageFile= D:\packaging\ci.bmp

 

ㅇ 인스톨링 마지막에 큰 이미지(해당 프로그램 메인 이미지나 제품 이미지 넣으면 좋음)

- 꼭 bmp파일이여야 하며, 일정 Size로 만들어야함. 해당 해상도는 Inno Setup홈페이지 참고

 

[Setup]   <ㅡ Setup 섹션에 작성해야함

WizardImageFile=  D:\packaging\product.bmp

 

ㅇ 제어판에서 프로그램 삭제 시 파일 및 폴더 삭제

[uninstallDelete]   <ㅡ uninstallDelete 섹션에 작성해야함 섹션이 없다면 해당섹션을 만들어 그대로 작성하면됨.

Type: files; Name: "{app}\*" 
Type: filesandordirs; Name: "{app}"  

 

ㅇ 프로그램 삭제 및 설치 시 이미 실행되고 있는 프로세스가 있다면 오류가 나니, 아래처럼 프로세스를 종료해야함

- 본인은 PING.EXE라는 프로세스를 종료하였으나, 보시는 분은 해당 EXE만 본인이 바꿔주면됨. 

[Code]  <ㅡ Code 섹션에 작성해야함 섹션이 없다면 해당섹션을 만들어 그대로 작성하면됨.

function InitializeUninstall: Boolean;
var
ErrorCode: Integer;
begin
      ShellExec('open',  'taskkill.exe', '/f /im {#MyAppExeName}','',SW_HIDE,ewNoWait,ErrorCode);   
      ShellExec('open',  'taskkill.exe', '/f /im PING.EXE','',SW_HIDE,ewNoWait,ErrorCode); 
      Result := True;
end;      

function InitializeSetup: Boolean;
var
ErrorCode: Integer;
begin
      ShellExec('open',  'taskkill.exe', '/f /im {#MyAppExeName}','',SW_HIDE,ewNoWait,ErrorCode);   
      ShellExec('open',  'taskkill.exe', '/f /im PING.EXE','',SW_HIDE,ewNoWait,ErrorCode); 
      Result := True;
end;

 

 

 

이것으로 Inno Setup을 이용해, 본인이 만든 EXE 어플리케이션을 패키징하여

고객 또는 친구, 지인 들에게 배포하는 방법을 설명 드렸습니다.

많은 도움이 되었으면 좋겠습니다. 

 

감사합니다.

posted by pgmr이상현
2023. 11. 27. 10:51 Project

 

안녕하세요, 이상현입니다.

 

어떠한 프로젝트를 진행하여, 완성된 결과물이 EXE파일로 나온다면.

 

여러분은 SW를 어떠한 형식으로 사용자 즉, 고객에게 어떻게 배포하시겠습니까?

 

일련의 exe파일의 배포의 경우 해당 Project의 디렉토리(폴더)를 Packaging하여 exe설치파일로 제공을 할 것입니다.

Project.exe

 

바로 이런식으로 말이죠.

 

이렇게 배포를 하지 않는다면, 보통 .zip형태로 고객 PC에 압축을 풀어 폴더로 그냥 배포하여 안에 exe파일을 실행하게 하거나, 해당 폴더를 D나 C드라이브 어딘가에 두고 exe파일을 바로가기로 만들어 바탕화면에 제공할 것 입니다.

 

위와 같이 Zip형태로 제공하였을 경우에 고객이 사용하면서 발생하는 문제점은 아래와 같을 것 입니다.

 

1. 파일 경로

 - 압축을 해제한 곳이 즉, 프로그램의 경로가 되므로 고객별로 파일의 경로가 상이하다.

   파일의 경로가 상이하다는 건 그만큼 관리하기가 어렵다는 말로 이어질 수 있습니다.

 

2. SW Error

 - SW사용에 있어 Error가 발생할 수 있다. SW개발을 해보신 분들은 아시겠지만. 한글 경로가 들어갈 시 Error가 발생하는

   경우를 종종 확인할 수 있었을 겁니다.

 

 3. Version관리

 - SW가 버그를 업데이트하거나 추가 기능이 나오면서 신규 Version이 생성됩니다. 그때 마다 신규 zip파일을 받아서

  압축을 해제하고 하다보면 점점 같은 Program인데 다른 Version의 폴더들이 무한정 생성될 것입니다.

   이에 고객이 사용함에 있어 매우 혼동될 수 있습니다.

 

4. 사용자편의성

 - 사용자가 Version의 업데이트나 프로그램 설치 및 제거 시 불편함을 겪을 수 있습니다.

 

 

위와 같은 문제를 InnoSetup과 같은 Packaging SW를 사용하여 Installer형태로 배포한다면,

고객들 즉 사용자들에게 보다 편하게 SW를 배포할 수 있을 것입니다.

 

다음 포스팅에서는 InnoSetup을 통해서 Project를 Packging하여 고객에게 배포하는 법에 대해서 포스팅하겠습니다.

 

감사합니다.

 

 

posted by pgmr이상현