InstallSheild로 여러가지 형태의 Installer를 만들지만, 대부분은 MSI 기반의 인스톨러로 만들게 됩니다.

이 MSI 형식으로 만들게 되면, .NET Framework 역시 지원하며, .NET Framework를 통해 설치용 Custom Action을 만들어 추가할 수 있습니다. 하지만, Custom Action을 이해하려면, MSI 설치 순서와 그 사이 사이의 특성을 어느정도 파악해야 합니다.

만일 단순히 파일을 삭제하거나, 검사하는 간단한 로직을 넣을 정도의 요량이라면, 굳이 Custom Action을 사용해 만들 필요는 없다고 생각합니다.

InstallSheild에서는 특정 DLL에 포함된 특정 기능을 도출해서 쓸 수 있습니다. .NET이든, Native ( VC++ 등을 사용한 ..)든 어떠한 형태든, 표준 DLL 규칙을 가지고 있다면 어떤 형태가 되었든 사용 가능합니다. 물론 이 기능에도 수많은 기능들이 있고, 다양한 조건으로 다양한 상태에서 사용할 수 있지만, InstallSheild의 특성을 무시해서라도, 일단 설치나 제대로 되게 끔 하려하고 있다면, 필자처럼 하면 될 것입니다.

1. 일단 DLL 만든다.

일단 DLL 부터 만듭니다.  C#의 프로젝트 추가를 하시고, 프로젝트 종류를 Class Library로 하면 됩니다.

image

만일 설치될 PC에 .NET Framework의 버전도 꼭 설정해주시기 바랍니다. Visual Studio 2010을 사용한다면, 기본적으로 .NET Framework 4.0으로 되게 되는데, 대상 PC에 .NET Framework 4.0이 설치될 가능성이 없는 경우 2.0 정도로 맞춰주시면 최신 Windows Update를 받는다면 거의 다 동작할 것입니다.

만들어진 DLL 프로젝트에서 그냥 public class에 public method를 만들기만 하면 됩니다. 적당히 이름을 붙이시기 바랍니다. 물론 InstallSheild와 쌍방 통신(InstallSheild 내의 데이터를 사용하거나, 실행 결과물을 InstallSheild에게 전달해야 되는 경우)가 필요하다면, 약간은 다르게 구성해야 겠지만, 만일 그럴 필요가 없다면, 그냥 class와 method를 public으로 만들기만 합니다.

여기 예제에서는 ClearOldProducts 라는 클래스의 CleanOldProductInfo 라는 함수를 만들었습니다.

적당히 안에 로직을 짜고, 컴파일 합니다. 만들어진 DLL을 이제 ISM 파일 수정에 들어가 추가해줍니다.

일단 적용할 ISM 파일을 엽니다.
그리고 트리 메뉴에서 Custom Actions and Sequence를 엽니다.

1

UI 혹은 CustomAction들이 보이는데, 그 중 Root Tree Item에서 오른쪽 버튼을 클릭합니다.
무척 많은 메뉴 내용이 보이는데, 그 중 "New Managed Code -> Stored in Binary table"을 선택합니다.
이미지 대상 PC에 설치되어 있거나, 이미 존재하는 파일을 가지고 하는 거면, 다른 옵션들을 활용할 수 있지만, 새롭게 설치하는 PC를 기준으로 본다면, MSI 인스톨러 안에 해당 DLL을 담고 있어야 하므로, "Store in Binary table"을 선택하는 것입니다.

2

그러면 새로운 Custom Action이 생기는데, 그 위치에서 오른쪽 버튼을 클릭 한 뒤, "Custom Action Wizard..."를 띄웁니다.

3

Wizard가 뜨면 맨 처음 최초의 창은 넘어가시고...

4

Custom Action의 설명을 추가할 것이 있으면 쓰지만, 그냥 넘어가도 됩니다.

5

Custom Action을 호출하는 방법인데, 그대로 두면 됩니다.

6

이제 그 대상이 되는 DLL을 찾아서 선택하면 된다. Browse 버튼을 클릭해서 특정 DLL을 선택해주면 됩니다.7

8

DLL 선택이 되었으면, 이제 그 DLL 안에 있는 특정 함수를 선택 합니다.직접 입력해도 되지만, Browse를 클릭해서 해당 하는 클래스와 메소드를 선택하면 됩니다.

9

10

동작 방식인데, 비동기식으로 하면 인스톨 단계가 그대로 진행되면서 동작하므로, 가급적 Synchronous를 선택합니다. 그리고 exit code를 별도 제공할 예정이면 exit code를 선택하지만, 만일 없다면 Ignores exit code를 꼭 선택해야 합니다. 안그러면 종료 오류로 더 이상 처리 안되는 경우도 있습니다.

11

실행 조건인데, 그대로 두시면 됩니다. 즉시 실행이므로, 특정 조건이 되면 바로 실행되게 끔하는 것입니다.

12

마지막으로 이 스크립트가 실행되는 시점입니다. UI 가 있는 MSI면 Install UI Sequence에서, 없으면 Install Execute Sequence를 선택하여, 이벤트를 고릅니다. 그리고 Condition에 1이라고 넣습니다.

C++ 처럼 TRUE면 1, FALSE 면 0 입니다. 만일 특정 조건(Windows 2000 이상일때 라든가, x86 CPU라든가, 별도 조건이 있는 경우)가 있다면 만들어서 넣어도 되지만, 조건에 상관없이 무조건 실행되는 거라면, 1이라고 넣어주시면 됩니다.

13

요약 창이 뜨고 종료됩니다.

이제 빌드 하고 동작시켜 보시면 됩니다.

728x90

+ Recent posts