강좌,팁

[강좌:019] CVI 런타임엔진과 설치 프로그램

조회 수 14424 추천 수 0 2003.12.08 15:57:17
허창원 *.59.121.140

[강좌:019] CVI 런타임엔진과 설치 프로그램

차례
개요
1. 간단한 테스트 프로그램 작성
2. 배포판(설치 프로그램) 파일 제작
3. 두 가지 실행 테스트
    3.1 실행파일, UIR 파일만으로 실행
    3.2 배포판 파일을 설치하여 실행
4. 런타임 엔진 설치하여 실행
5. 소스없이 실행모듈만으로 설치 프로그램 제작하기
후기

개요
이번에는 CVI런타임 엔진에 대한 내용을 다루어 보겠습니다.
런타임 엔진(Runtime Engine)이란, 말 그대로 실행시에 필요한 모듈입니다. Visual Basic이나 MFC로 작성하는 Visual C++ 프로그램, 그외의 프로그래밍 툴은 대부분 런타임 엔진을 제공하고 있습니다. Visual C++로 Win32 API 함수들만 이용하여 작성한 프로그램이 아니라면, 그 개발툴에서 제공하는 런타임 엔진을 필요로 합니다. (Win32 API는 Windows 95이상의 OS 수준에서 기본적으로 제공하는 런타임 모듈이라고도 할 수 있겠죠! 하지만, OS에서 제공하는 것을 두고 런타임 엔진이라고 부르진 않죠!)

MSDN 도움말을 찾아보니까, Microsoft VB6의 경우 아래와 같은 런타임 파일들이 필요하다고 나와있더군요.

Msvbvm60.dll
Stdole2.tlb
Oleaut32.dll
Olepro32.dll
Comcat.dll
Asyncfilt.dll
Ctl3d32.dll

경우에 따라서 필요하지 않은 파일도 있겠죠!
이렇게 런타임 파일들이 있다는 것은 그만큼 개발자가 작업해야할 일이 간단해지고, 수월해진다는 것을 의미하는 것입니다.

LabWindows/CVI의 경우에도 다른 툴에서는 볼 수 없는 편리하고 독특한 기능들이 많이 있습니다. 화면 컨트롤에 관한 것도 있고, 장치와 관련된 함수들도 많이 있습니다. 이러한 기능들을 CVI 런타임 엔진(파일)으로 만들어두고, CVI 개발자는 그 함수들을 호출하여 사용만 하면 되도록 지원하고 있습니다.

보통 런타임 엔진은 DLL 형태로 제공됩니다. 일반적으로 DLL을 이용하려면, 컴파일, 링크시에 해당 DLL에 대한 정보가 헤더파일, Import Library 형태로 제공되어야합니다. 하지만, CVI로 프로그램을 개발하려면 보통 기본적으로 CVI 런타임 파일을 이용하게 되기 때문에 굳이 Import Library를 프로젝트에 포함시킬 필요가 없습니다. CVI 툴이 알아서 링크하기 때문이죠!

개발툴로 개발한 프로그램의 기본적인 기능은 이렇게 런타임 엔진에서 제공하는 것이 많기 때문에, 실제 개발자가 개발한 프로그램의 크기는 그리 크지 않습니다.

설치(배포) 프로그램을 만든다는 것은 개발자가 개발한 프로그램과 해당 개발툴의 런타임 파일들을 시스템에 설치할 수 있도록 만들어주는 것입니다. 설치 프로그램을 만들면, CVI 6.0의 경우 보통 5MB가 조금 넘게 되더군요. 그 용량의 대부분은 런타임 파일들이죠!

그런데, 하나의 시스템에 CVI로 개발한 프로그램을 여러개 설치하여야 할 경우, 그 하나하나의 프로그램에 대해 설치 프로그램을 만든다면 런타임 엔진이 중복적으로 포함되어 용량이 커지기 때문에 불편한 점이 많습니다. 또, 프로그램을 업데이트하여 상대방에게 보내주려고 할 때도 개발자가 개발한 실행파일 부분만 보내준다면 훨씬 수월해 질 수 있습니다.

필요에 따라 이러한 작업을 원할하게 할 수 있도록, 또 런타임엔진에 대한 이해의 폭을 넓히기 위해 몇가지를 테스트해보도록 하겠습니다. 먼저는 간단한 테스트 프로그램을 만들어 볼 것이구요, 이것을 설치 프로그램으로 제작하여 다른 PC에서 실행시켜볼 것이고, 런타임 엔진만을 설치하여 실행도 해볼 것입니다. 그리고, 소스코드가 없이 실행에 관련된 파일만으로 설치 프로그램을 만들어 볼 것이고, 여러 개의 프로그램을 하나의 설치 프로그램으로 만드는 것도 해보겠습니다.

1. 간단한 테스트 프로그램 작성
테스트에 이용할 프로그램은 매우 간단하게 만들어 보겠습니다. 기능은 종료 버튼 하나만 두도록 하죠!
프로젝트 명은 Runtime.prj로 하겠습니다. 그림 1.1에 UIR 파일을 보였습니다.

그림 1.1 Runtime.uir 화면 구성

Panel의 설정은 표 1.1과 같이 하였습니다.

표 1.1 Panel 속성

속성

내용 혹은 이름

Constant Name

PANEL

Callback Function

PanelCB

Panel Title

여기서는 실행되나요?

Control 설정은 표 1.2와 같이 하였습니다.

표 1.2 Control 속성

컨트롤 종류

Constant Name

Callback Function

Label

Command Button cmdExit cmdExit Exit
 

그리고, 이제 Code를 생성하도록 합니다. UIR 창의 Code-Generate-All Code... 메뉴를 선택하여, 그림 1.2와 같이 설정하여 OK 버튼을 클릭합니다.

그림 1.2 Runtime.prj의 Code Generate

그러면, 그림 1.3과 같이 코드가 생성된 창이 열립니다.

그림 1.3 Runtime.prj의 코드 생성된 화면

이제, UIR 파일, h 파일까지 프로젝트에 포함시키면, 그림 1.4와 같이 되겠죠?

그림 1.4 Runtime.prj의 프로젝트 창

이제 Build 메뉴의 Create Debuggable Executable이나 Create Release Executable을 선택하여, 실행파일을 만들고,
Run메뉴의 Debug/Execute Runtime_....exe를 실행하면 별 문제없이 실행이 됩니다.

그림 1.5 실행메뉴

그림 1.6에는 실행화면을 보였습니다.

그림 1.6 실행화면

2. 배포판(설치 프로그램) 파일 제작
앞 단계까지 작성된 프로그램은 보통 설치 프로그램(Distribution Kit)을 통해서 다른 시스템에 설치됩니다. 설치 프로그램을 만들어보겠습니다. 배포할 프로그램을 만들려면, 실행파일을 Release 버전으로 만들어야겠죠? 그림 2.1에 보인대로 Release 모드로 변경하여, Build-Create Release Executable을 실행합니다.

그림 2.1 Release 모드로 Build

그림 2.2에 Release 실행파일이 만들어졌다는 메시지창을 보였습니다.

그림 2.2 Release Executable 파일 생성됨

위와 같이 Release 실행파일을 만들지 않았더라도, Build-Create Distribution Kit... 메뉴 실행시에 그림 2.3과 같은 메시지를 보여주면서, Release 실행파일을 만들도록 유도합니다.

그림 2.3 Distribution Kit 프로그램을 만들기 전에 release 실행파일을 만들도록 유도함

어떻게 하든지, Build-Create Distribution Kit... 메뉴를 실행하면 그림 2.4와 같은 화면이 나타납니다.

그림 2.4 Runtime.prj의 배포판(설치 프로그램) 만들기

뭐, 별로 바꿀 게 없습니다. 그대로 버튼을 눌러 배포판 파일들을 만듭니다. 해당 디렉토리가 없고, 그 디렉토리를 만들건지를 물어보는 메시지 창이 뜨면, "Yes"라고 하고 넘어갑니다.

이제 그림 2.5에 보인대로, 설치 프로그램이 만들어졌습니다.

그림 2.5 생성된 배포판(설치 프로그램) 파일들

그림 2.5에 빨간 박스친 파일들 모두가 다 있어야 설치가 됩니다. 이제 이 설치 파일과 그림 2.6에 보인 실행파일, UIR 파일을 CVI가 설치되지 않은 PC로 갖고 가서 테스트를 해보겠습니다.

그림 2.6 실행파일과 uir 파일

3. 두 가지 실행 테스트
CVI가 설치되어 있지 않은 PC에서 실행파일과 uir 파일만으로 실행을 해보고, 그 다음에는 설치를 한 다음에 실행을 해보도록 하겠습니다. 우선 그냥 실행파일부터 실행해 보도록 하겠습니다.

3.1 실행파일, UIR 파일만으로 실행
그림 2.6에 보인 두 개의 파일을 CVI가 설치되어 있지 않은 PC의 임의의 폴더로 복사하여 실행해 보았습니다. 어떻게 될까요? 그림 3.1을 보십시오.

그림 3.1 런타임 파일이 없을 경우의 실행에러

cvirte.dll 파일을 찾을 수 없다는 에러 메시지 창이 뜨네요. 하지만 cvirte.dll만 복사해 준다고 해결될 문제는 아닙니다. 결국 그냥 실행파일만 갖고 가서는 실행할 수 없다는 것을 확인하게 되는군요.

3.2 배포판 파일을 설치하여 실행
그렇다면, 그림 2.5의 배포판 파일(설치 프로그램)을 복사해 와서 설치를 한다음, 실행을 해보도록 합시다. setup.exe를 클릭하여 설치하는 화면을 그림 3.2에 축약하여 보였습니다.

그림 3.2 Runtime 프로그램의 배포판 설치 과정

그림 3.3에서 방금 설치한 Runtime 프로그램에 대한 실행 메뉴를 선택해서 실행해봅시다.

그림 3.3 시작 메뉴에서 Runtime 프로그램 실행하기

역시 아무 문제없이 실행되는군요.

그림 3.4 설치된 프로그램 실행

실행이 되는 것을 확인하고 나서, 설치한 프로그램을 제거해봅시다. 프로그램의 제거는 제어판의 "프로그램 추가/제거"를 이용해서 할 수도 있고, 그림 2.5의 setup.exe를 한번 더 실행하면 uninstall 과정이 진행됩니다. 그림 3.5에 Runtime 프로그램을 제거하는 과정을 보였습니다.

그림 3.5 Runtime 프로그램의 제거

4. 런타임 엔진 설치하여 실행
자, 그렇다면, 런타임 엔진을 설치한 다음에 그림 2.6의 실행파일과 UIR 파일만 복사해서 실행을 해보도록 합시다. CVI 런타임 엔진은 NI사의 사이트에서 다운로드 받을 수 있습니다. CVI정보나눔 자료실에도 다운로드 받을 수 있는 주소를 올려놓았습니다. 현재 CVI 7.0 런타임 엔진까지 나와 있군요. 여기서는 CVI 6.0 런타임 엔진을 다운로드 받아 이용해 보겠습니다.

그림 4.1 CVI 6.0 런타임 엔진 파일들

그림 4.1에 CVI 6.0 런타임 엔진 설치 파일을 보였습니다. 여느 배포판(설치 프로그램) 파일과 별로 다를 게 없죠? setup.exe 파일을 실행하여 CVI 6.0 런타임 엔진을 설치해봅니다. 지금 CVI가 설치되지 않은 PC에서 설치를 하는 겁니다. 그림 4.2에 그 과정을 축약하여 보였습니다.

그림 4.2 CVI 6.0 런타임 엔진 설치

이제 그림 2.6의 실행파일과 UIR 파일만으로 실행해볼까요? 역시 그림 4.3와 같이 제대로 실행이 되는군요.

그림 4.3 런타임 엔진이 설치된 환경에서 실행파일 실행

자, 그러면 여기서 재미있는 걸 하나 확인해보고 넘어갈까요? 그림 4.4에는 CVI 6.0 런타임 엔진을 설치하면 생성되는 폴더를 보였습니다. 이 그림은 CVI가 설치된 제 PC의 폴더 구조를 보여주고 있는데, 실제로 CVI 6.0 런타임 엔진만 설치하면, "C:\Program Files\National Instruments\Shared\Mesa" 디렉토리만 생겼던 것 같습니다. 그 안에 mesa.dll 이 있죠?

그림 4.4 CVI 6.0 설치시 복사된 mesa.dll

이제 CVI 6.0 런타임 엔진을 제거하면 그림 4.4의 디렉토리와 mesa.dll이 없어집니다. 그리고 나서 실행을 하면, 그림 4.5와 같이 mesa.dll을 찾을 수 없다는 메시지 창이 뜨지만, 확인을 누르고 진행하면 그래도 실행은 됩니다.

그림 4.5 CVI 6 런타임 제거후 Runtime.exe를 실행했을 때

그림 4.5은 "확인" 버튼을 누른 이후 화면입니다.

그림 4.6 mesa.dll 없이 실행된 Runtime.exe

C:\Windows\System32 디렉토리를 뒤져본 결과 CVI 6.0 런타임 엔진 파일 중의 하나인 cvirte.dll 파일은 런타임 엔진 제거 후에도 남아 있더군요.  그림 4.6의 화면을 잘 보면, mesa.dll의 역할을 어느 정도 짐작이 가네요, 그죠?

5. 소스없이 실행모듈만으로 설치 프로그램 제작하기
자, 그렇다면, 누군가로부터 실행파일과 UIR 파일, 그리고 그 실행파일이 호출하는 사용자 정의 DLL 파일을 받았다고 합시다. 소스 코드 파일은 물론 없구요. 이럴 경우 배포판(설치 프로그램)을 만들 수 있다면, 좋겠죠? CVI에서 이것도 가능합니다.

그러면, 그림 2.6의 두 파일, Runtime.exe와 Runtime.uir 파일만 갖고 배포판 파일을 만들어 봅시다.

CVI를 실행시켜서 원하는 이름의 빈 프로젝트를 만듭니다. Runtime 이라는 이름으로 해도 되고, 다른 이름을 해도 상관없습니다. 여기서는 abc라고 해볼까요? 그리고, 프로젝트에 포함시킬 것도 없이, 그대로 Build-Create Distribution Kit... 메뉴를 선택합니다.

그림 5.1 비어있는 프로젝트 창에서 배포판 생성 메뉴를 바로 선택

그랬더니, 그림 5.2에 보인 것 처럼 release 실행파일이 없다는 메시지 창이 뜨죠? 실행파일을 만들건지 물어보는 그 물음에 단호히 "No"라고 합니다. 왜냐하면, 이미 Runtime.exe 실행파일을 갖고 있기 때문이죠!

그림 5.2 release executable를 만들지 물어봄

그러면, 그림 2.4와 비슷한 화면이 뜨죠?  그림 5.3에 보였습니다.

그림 5.3 abc 프로젝트의 배포판 생성 대화창

그림 5.3에서 버튼을 클릭하여, 아까 그 두 파일을 포함시켜 줍니다. 그림 5.4에 그 과정을 보였습니다.

그림 5.4 Edit Group 과정

프로젝트 명으로 이미 포함된 abc.exe는 제거하고, 이미 있던 Runtime.exe와 Runtime.uir을 추가합니다. 그리고, 버튼을 클릭합니다. 이제 그림 5.3의 버튼을 클릭하여 배포판 파일을 만듭니다.

이렇게 해서 만들어진 배포판 파일을 그림 5.5에 보였습니다.

그림 5.5 abc라는 이름으로 생성된 배포판 파일들

이 설치 프로그램을 설치하여 실행해도 아무 문제없이 실행됩니다.

자, 그렇다면, 굳이 하나의 프로그램만 이렇게 배포판 파일로 만들 필요는 없겠군요. 비슷한 방법으로 여러개의 실행 파일들을 넣어서 배포판 파일을 만들어 볼까요? 그림 5.6에 보인 것처럼 AudioPlayer라는 프로그램의 실행모듈들을 복사해 와서 배포판으로 만들어 보겠습니다.

그림 5.6 여러개의 실행 모듈을 하나의 배포판에 추가하기

그림 5.4 화면에서 그림 5.6에 선택된 파일들을 추가합니다. DLL 파일들은 DLL Files라는 그룹을 만들어서 추가해도 되고, 그냥 abc Files라는 그룹에 그대로 추가해도 상관없을 겁니다. 그리고, 설치를 했더니, 그림 5.7과 같은 프로그램 그룹이 만들어졌습니다.

그림 5.7 하나의 프로그램 그룹에 여러 개의 프로그램이 설치됨

두가지 다 제대로 실행됨을 확인할 수가 있습니다.

후기
이렇게 해서 런타임 엔진과 배포판(설치 프로그램)과 관련된 내용을 다루었습니다.
강조하고 싶은 주된 내용은,

런타임 엔진을 한번 설치해두면, 실행파일만(?) 복사해도 실행할 수 있다는 것입니다.
엄밀히 말해 UIR 파일, 사용자가 만든 DLL도 있어야겠지만, 런타임 파일까지 들고 다닐 필요는 없다는 거죠!


이런 내용을 이해하시면, 프로그램의 업데이트에 있어서 훨씬 자유로워지실 것입니다.

2003년 성탄절이 얼마남지 않았군요. 하나님의 은총이 모든 분들에게 가득하시기를...

 

2003년 12월 8일
극동테크(www.kdtechno.com) 허창원

List of Articles
번호 제목 글쓴이 날짜 조회 수
56 [팁:6] 배포판(설치) 프로그램에 데이터 폴더 포함하기 허창원 2004-05-20 14459
55 [팁:5] Parallel Port 이용할 때, CVI Low-level support driver [2] 허창원 2004-05-18 12695
54 [팁004]팁아닌...팁..Text Message오른쪽 정렬..... [4] 야리싸내 2004-02-02 14803
53 객체의 위치값을 이용한 퍼즐 게임. file [2] 조인배 2004-01-09 13610
52 [강좌020]실행시에 uir파일을 사용하지 맙시다. file [6] 야리싸내 2003-12-19 13165
» [강좌:019] CVI 런타임엔진과 설치 프로그램 허창원 2003-12-08 14424
50 그래프에 Zoom 기능을 만들어봤습니다.. ^^ file 야리싸내 2003-09-30 13273
49 헉..ㅠ_ㅠ;; 죄송합니다..위에 첨부파일에 소스가 없네요....ㅠ_ㅠ; file 야리싸내 2003-11-26 13234
48 [팁:003] NI DAQ 프로그래밍 예제 얻기 file 허창원 2003-08-11 14675
47 켄바스 기능을 이용한 아날로그시계 file [1] 조인배 2003-07-09 14383
46 [강좌:018] 따라하기 13. AudioPlayer(MP3, WMA, ASF, WAV 등) (2) 허창원 2003-04-11 13072
45 [강좌:018] 따라하기 13. AudioPlayer(MP3, WMA, ASF, WAV 등) (1) [1] 허창원 2003-04-11 14530
44 [강좌:017] 따라하기 12. 재사용 가능한 Library(static lib, DLL) 만들기 허창원 2003-04-11 15278
43 [팁:003] 종료시 MS Office와의 충돌 피해가는 대안 [2] 허창원 2003-04-01 13400
42 [강좌:016] 따라하기 11. 데이터 뷰어3로 업그레이드하기 (2) 허창원 2003-03-19 13717
41 [강좌:016] 따라하기 11. 데이터 뷰어3로 업그레이드하기 (1) 허창원 2003-03-19 12591
40 [강좌:015] 따라하기 10. 초기설정파일(ini) 이용하기 (3) [2] 허창원 2003-02-25 13861
39 [강좌:015] 따라하기 10. 초기설정파일(ini) 이용하기 (2) [2] 허창원 2003-02-25 12386
38 [강좌:015] 따라하기 10. 초기설정파일(ini) 이용하기 (1) [2] 허창원 2003-02-25 14685
37 [강좌:014] 따라하기 9. 터치스크린에서 숫자 입력하기 (3) [4] 허창원 2003-01-15 12334