본문 바로가기

IT 살이/04. 기술 - 프로그래밍

[연재 09] ClickOnce 애플리케이션의 필수 프로그램 배포 - 부트스트래퍼(Bootstrapper)

프로덕트 XML 파일

부트스트래퍼(Bootstrapper)는 ClickOnce 애플리케이션이 구동되기 전에 애플리케이션에서 필요로 하는 필수 프로그램(prerequisties)이 먼저 설치되어 있는지를 확인하는 작은 부피의 프로그램을 말한다. Visual Studio.NET 2005에는 내장된 부트스트래퍼 기능이 있다. 우리는 이 기능을 사용하여 ClickOnce 애플리케이션이 실행되기전에 필요한 다른 컴포넌트를 설치할 수 있다.
달봉이는 지금까지 알고 있는 방법중에서 이전의 COM 컴포넌트나 .NET 어셈블리나 가리지 않고 클라이언트로 배포를 할 수 있는 가장 쉬운 방법중의 하나로 여기고 있다. 단점은 ClickOnce에서만 가능하다는 것이다.[현재 2006.09.16]

VS.NET의 부트스트래퍼 기능을 사용하기 위해서는 우선 컴포넌트를 설치하는 설치 프로그램(.exe or .msi)을 작성해야 한다. 그런 다음 이 설치 프로그램을 부트스트래퍼에 등록해야 한다. 그러기 위해서는  XML형식의 프로덕트 파일(product file)을 제작해야 한다. 

1200932437 

프로덕트 파일

프로덕트 파일은 ClickOnce 프로그램이 실행되기 전에, 어떤 필수 프로그램들이 설치되어 있어야 하는지를 설명해주는 부트스트래퍼용 manifest 파일을 생성해준다. 프로덕트 파일에는 ClickOnce 애플리케이션이 필요로하는 필수 컴포넌트들을  설치하는 설치프로그램들에 대한 정보를 여러개 포함시킬 수 있다.
이 그림처럼 프로덕트 파일을 생성해서 설치 프로그램과 같이 적절한 위치에 두면  ( 달봉의 경로는 다음과 같다. C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages ) 아래 그림처럼 VS.NET의 게시 디자이너에서 필수 구성 요소 버튼을 클릭했을때 선택할 수 있는 박스에 나타나게 된다. 이제 필요한 프로그램을 선택해서 게시를 하면 된다.

1197118260

VS.NET에서 필수 구성 요소 선택
(파일을 클릭하면 선명한 그림이 뜹니다)

이제 이 프로덕트 XML 파일을 제작하는 방법을 알아본다.

프로덕트 파일 제작

프로덕트 파일을 제작하기 위해서는 부트스트래퍼가 이해할 수 있는 규칙에 맞도록 작성해야 한다. 이런 XML 스키마는 다음 링크에서 찾아볼 수 있다.
Product and Package Schema Reference - msdn
http://msdn2.microsoft.com/en-us/library/ms229223.aspx

그렇지만 이 스키마를 이해하고 직접 손으로 작성하라고 하면 MS에 짜증이 날것이다. 이런 스키마가 있다면 이런 것을 제작할 수 있는 편집기도 주면 좋잖은가. 근데 아직 공식적으로 출시된 유틸 프로그램은 없는 것으로 안다. 다행히도 이 XML 파일을 생성해주는 편집 툴을 제공하는 훌륭한 분이 계시다.

프로덕트 파일 생성 툴
ClickOnce Bootstrapper Manifest Generator

자세한 내용은 Powertoys blog에서 볼 수 있다.

이제 이 툴을 사용하는 방법을 소개한다. 툴을 실행시키고 File->New를 선택한다.

1230043952

Package Manifest 프로젝트 타입을 선택한다.

1363539001

1329959148

그림처럼 package 노드가 하나 기본적으로 생성되면 적절하게 package 이름을 입력한다. 이 이름은 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages 아래에 생성되는 폴더명이 될 것이다.

1125104282

그런 다음 위 그림처럼 "Add Install File" 버튼을 클릭하면 아래처럼 설치파일을 추가할 수 있는 창이 뜬다.

1104026117
적절한 설치파일을 검색해서 선택한다. 이 설치 파일은 ClickOnce 애플리케이션이 실행되기 전에 미리 설치되어 있어야 하는 컴포넌트를 클라이언트 PC에 설치하게 될 것이다. 달봉이는 임시로 iis60rkt.exe라는 파일을 선택하고 있다. ClickOnce 애플리케이션과는 전혀 상관없는 셋업 파일이긴 하지만.

1022242726

그런 다음 적절한 display 명을 준다. 이 이름은 VS.NET의 필수 구성요소 선택하는 창에 출력될 것이다.

1104462412

그런 다음 System Checks 탭을 선택한다. 이 탭에서는 이 컴포넌트가 이미 설치되었는지를 체크하는 로직을 선택할 수 있다. 설치 여부를 체크하는 로직은 여러가지를 제공하고 있다. 그림의 아이콘에 커서를 올려놓으면  설치 여부를 체크하는 로직으로
"File Check",
"Registry Check",
"Registry File Check",
"MSI Product Check",
"External Check",
"Assembly GAC Check"

등이 있음을 알 수 있다. File Check라는 것은 앞의 그림처럼 "어떤 경로의 폴더에 지정한 파일이 있으면 이미 이 PC에는 원하는 셋업이 이뤄져있다"는 것으로 간주하겠다는 것이다. 레지스트리에 특정 값이 있는지를 판단해서 설치여부를 판단할 수도 있다. 시스템 체크 로직에 대한 다른 구체적인 방법에 대해서는 앞에서 알려준 MSDN 링크 페이지를 통해서 알아보길 바란다.
달봉이는 단순히 그림과 같은 경로에 iisTools.chm 파일이 있는지를 판단해서 그 결과값을 IIS60rktInstalled에 받아 두도록 하고 있다.
1108723164

다음은 Install Conditions 탭을 선택한다. 이곳에서는 System Checks 탭에서 시스템의 상태를 체크한 값을 이용해서 값에 따라서 어떻게 할 것인지를 설정할 수 있다. 그림은 앞에서 설정된 IIS60rktInstalled 값이 0보다 크거나 같으면 그냥 설치를 통과하도록 설정하고 있다. IIS60rktInstalled 같은 변수에 어떤 값이 저장될 지는 시스템 체크 로직에 따라 다르다. 이런 구체적인 값도 앞에서 알려준 msdn 링크를 참조하기 바란다.

1053607751

다음은 Exit Codes 탭을 선택한다. 설치 파일이 exit code를 리턴하고 그것에 따라 실패, 성공, 재부팅들을 설정해줄 수가 있다. 달봉은 exit code에 대한 설정을 해 주지 않고 있다. 다만 아래 부분을 보면 "Use Default System Exit Codes"가 선택되어 있고 결과값으로 Fail이 선택되어 있는데, 이것은 설치 후 상태를 기본적으로 설치 실패로 설정하겠다는 것이다. 우리는 이것의 체크를 없애 줘야 한다.  

1229986605

그런 다음 저장 버튼을 클릭하면 지금까지 설정한 내용을 저장할 수 있다. 이때 저장된 내용은 우리가 원하는 xml 형식의 프로덕트 파일은 아니다. 이렇게 저장된 내용은 언제든지 다시 불러와서 재 편집을 할 수 있다(근데, 이 기능이 아직은 제대로 작동하지 않는듯하다)
1230226784

우리가 원하는 xml의 프로덕트 파일을 최종적으로 만들어 내기 위해서는 위 그림처럼 "Project->Build" 메뉴를 선택해야 한다. 이 메뉴를 선택하고 나면 아래 그림처럼 결과가 나타난다.

1147821584

이 그림은 최종적으로 프로덕트 파일이 저장된 경로(기본적으로 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages )와 프로덕트 파일을 생성하는과정에 남긴 로그를 보여주고 있다. 프로덕트 파일의 저장 경로는 "Project->Properties"에서 변경할 수 있다.

이렇게 해서 최종적인 프로덕트 파일이 생성되었고 적절한 폴더에 위치시켰다. 이제 VS.NET을 실행시키고 게시 디자이너를 통해서 필요한 설치 프로그램을 선택한 후 게시를 하면 된다.

--------------------------------------------------------------------------------

참조 문서

Product and Package Schema Reference - msdn
http://msdn2.microsoft.com/en-us/library/ms229223.aspx
ClickOnce Deployment Technology - Peter Bromberg
http://www.wise.com/Library/ClickOnce.pdf
ClickOnce : Bringing Ease and Reliability to SmartClient Deployment
http://www.code-magazine.com/article.aspx?quickid=0601041&page=1
msdn : Deploying applications
http://msdn2.microsoft.com/en-us/library/6hbb4k3e(VS.80).aspx