본문 바로가기
소프트웨어/기타

Visual Studio Installer Project - Custom Action 추가 방법

by Jinwood 2023. 1. 9.
반응형

늘 InstallShield Limited Edition으로만 설치파일을 만들었는데,

PC 포맷 후 InstallShield LE 버전이 설치되지 않았다.

2021년 12월경 작성된 revenera 관계자 게시글에 의하면 Limited Edition은 더 이상 지원하지 않는다고 한다. ㅠ

 

배포 프로그램을 찾다가 Visual Studio Installer를 알게 되었고,

새로운 프로젝트에는 Visual Studio Installer Project로 설치 파일을 만들어야 하는 상황이 발생했다.

 

InstallShield와 설치 파일 생성 절차는 유사하나 Custom Action을 생성하는 방법은 매우 달라서 이 글을 작성한다.

InstallShield에서 CustomAction은 *.exe 또는 VBScript / JScript 파일을 생성하여 경로만 지정해주면 되었다.

Visual Studio Installer에서는 단순히 *.dll 파일을 생성해서 추가하는 것이 아니라,

새 프로젝트에서 '설치 관리자 클래스'를 생성, 해당 클래스에 사용자 지정 코드를 작성 후

Custom Actions에서 기본 출력으로 지정해주어야 한다.

(대강 dll 만들어서 추가해봤더니 안되서 열심히 찾아봤다.)

 

가장 도움되었던 자료는 아래 링크이다. Visual Studio Installer에 대한 이해를 높일 수 있으므로

방문해보는 것을 추천한다.

http://vbcity.com/forums/t/145818.aspx

 

이제 본격적으로 Custom Action 설정 방법에 대해 설명하겠다.

 

1. 빈 프로젝트를 생성한다.

생성할 프로젝트는 Visual Studio Installer 프로젝트가 있는 솔루션에 프로젝트를 추가하여 생성한다.

(CustomAction으로 작성하였다.)

 

2. 설치 관리자 클래스를 추가한다.

설치 관리자 클래스는 Visual C# 항목에 있으며, CustomInstaller.cs로 생성하였다.(위 그림은 이미 추가된 상태)

 

3. 추가한 CustomInstaller.cs 클래스에서 단계별 코드를 작성한다.

추가된 CustomInstaller.cs 클래스의 코드 보기를 한다면 아래와 같은 화면이 보일 것이다.

 

여기서 Custom Action이 실행될 단계에 따른 메서드를 생성하고, 해당 단계에 진행될 코드를 작성한다.

위 참고 링크에서 각 설치 이벤트에 따라 Install/Uninstall 시 Rollback 여부를 표시한 FlowChart를 제공하였다.

FlowChart를 확인하여 설정할 단계를 선택하고, 코드를 작성하면 된다.

 

 

아래 코드는 Commit 단계에서 수행할 동작을 추가한 코드이다.

stateSaver 추가를 위해 Install 메서드는 반드시 필요하다. 

 

namespace CustomAction
{
    [RunInstaller(true)]
    public partial class CustomInstaller : System.Configuration.Install.Installer
    {
        public CustomInstaller()
        {
            InitializeComponent();
        }

        private string programFilesPath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
            stateSaver.Add("TargetDir", Context.Parameters["DP_TargetDir"].ToString());
        }

        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);

            // do something
        }

    }
}

// do something 부분에 코드를 작성했다면 프로젝트를 빌드한다.

 

4. 빌드된 CustomAction을 Visual Studio Installer → 사용자 지정 작업에 추가

Visual Studio Installer 프로젝트에서 우클릭하여 View → 사용자 지정 작업을 선택한다.

 

Custom Actions가 표시되면 Install 및 Commit에 기본 출력으로 설정하면 완료된다.

stateSaver()를 위해 Install에 대한 override 메서드를 추가했기 때문에

Custom Actions → Install에 CustomAction의 기본 출력을 하나 설정하고,

 

Commit에 대한 override 메서드를 추가했기 때문에

Custom Actions → Commit에 CustomAction 기본 출력을 설정하였다.

만약 Rollback, Uninstall과 같은 단계에서 Custom Action이 실행되어야 한다면, 기본 출력 설정을 변경하면 된다.

(CustomInstaller에도 동일한 override 메서드가 존재해야한다.)

 

기본 출력 설정 후 설치파일을 빌드하면 된다.

끝!

 

※문의 또는 정보 수정이 필요한 경우 댓글 달아주세요.

 

반응형

댓글