Windows Installer 설명서 Part13 사용자 지정 작업을 수행할 시기

19243 단어 installerWiXToolset
이전 글로 이동    디렉토리로 이동    다음 글로 이동
사용자 지정 작업을 수행할 시기
설치 프로그램에 Windows Installer를 설치할 때 표준 기능이 없으면 사용자 정의 작업이 사용됩니다.그리고 이 사용자 정의 동작의 실행이 실패했습니다. 설치가 중단되었을 때 원상태로 복원해야 합니다.따라서 Windows Installer가 설치 도중에 어떤 문제가 발생하여 설치를 계속할 수 없게 되면 이전에 수행한 처리를 원래 상태로 복원하고 설치를 종료하는 기능이 있습니다.이 기능은 롤백이라고 한다.사용자 정의 동작은 서열의 임의의 위치에 삽입할 수 있지만, 롤백을 사용하면 실행 가능한 위치를 정합니다.그것은 InstallInitialize동작과 InstallFinalize동작 사이이다.1
사용자 정의 작업의 실행 시간과 관련된 옵션은 다음과 같습니다.
  • immediate(즉시)
  • deferred(지연)
  • 롤백(롤백)
  • commiit(제출)
  • InstallInitialize 동작과 InstallFinalize 동작 사이에는 보통 모든immediate, 모든deferred, 모든commiit의 순서에 따라 실행된다.사용자 정의 작업이 다음 그림과 같은 구조(표준 작업 생략)일 경우 (1), (2), (3) 순서로 수행됩니다.deferred의 사용자 정의 동작이 오류를 반환할 때, 이전에 롤백이 지정한 사용자 정의 동작은 반대 순서로 실행됩니다.

    이 예에서 오류가 발생하지 않고 설치에 성공한 경우 다음을 수행합니다.
    Action1 -> Action4 -> Action9 -> Action3 -> Action7 -> Action10 -> Action5 -> Action8
    동작 3에 오류가 발생하면 다음 순서에 따라 동작을 실행합니다.
    Action1 -> Action4 -> Action9 -> Action3 -> Action2
    동작 7 오류 발생 시 다음 순서로 작업을 수행합니다.
    Action1 -> Action4 -> Action9 -> Action3 -> Action7 -> Action6 -> Action2
    이러한 특징을 통해 알 수 있듯이 각 실행 시기와 관련된 옵션은 다음과 같이 구분해서 사용하는 것이 좋다.
    옵션
    용도
    immediate(즉시)
    실패하더라도 복구할 필요가 없는 작업입니다.주로 설치처에서 정보를 얻는 등 설치처를 변경하지 않는 작업이다.
    deferred(지연)
    장애가 발생한 후 복구해야 하는 작업입니다.예를 들어 방화벽 설정이나 사용자의 제작 등 설치 목적지에 대해 어떤 변경을 가하는 조작을 한다.
    롤백
    설치 위치의 변경 사항을 취소합니다.deferred에 설치는 성공했지만, 이전의 실패로 원상복구하거나, deferred에서 실행한 뒤 도중에 무언가를 남기고 사라지는 등 설치 내용에 따라 여러 패턴을 고려하기도 한다.immediate의 사용자 정의 동작에서 오류가 발생하더라도 롤백의 사용자 정의 동작을 호출하지 않습니다.
    커밋
    모두 성공한 후에 실행하고 싶은 조작입니다.롤백으로 이동한 후 처리를 실행하지 않습니다.
    실제 동작을 확인하다
    실제 설치 프로그램을 사용해서 운행해 보세요.Visual Studio에서 제작한 WiX Toolset의 초기 형태를 바탕으로 위 그림과 같이 10개의 사용자 정의 동작을 추가했다.
    Product.wxs
    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Product Id="E431156F-12F8-4807-88E1-3D28559FE8CA" Name="Part13_01" Language="1033" Version="1.0.0" Manufacturer="tohshima" UpgradeCode="0c76a38f-0ec9-4efc-bfa2-f5b459af7d45">
            <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    
            <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
            <MediaTemplate />
    
            <Binary Id="VbsAct" SourceFile="customAct.vbs" />
            <CustomAction Id="tAct01" BinaryKey="VbsAct" VBScriptCall="fAct01" Execute="immediate" Return="check"></CustomAction>
            <CustomAction Id="tAct02" BinaryKey="VbsAct" VBScriptCall="fAct02" Execute="rollback"  Return="check"></CustomAction>
            <CustomAction Id="tAct03" BinaryKey="VbsAct" VBScriptCall="fAct03" Execute="deferred"  Return="check"></CustomAction>
            <CustomAction Id="tAct04" BinaryKey="VbsAct" VBScriptCall="fAct04" Execute="immediate" Return="check"></CustomAction>
            <CustomAction Id="tAct05" BinaryKey="VbsAct" VBScriptCall="fAct05" Execute="commit"    Return="check"></CustomAction>
            <CustomAction Id="tAct06" BinaryKey="VbsAct" VBScriptCall="fAct06" Execute="rollback"  Return="check"></CustomAction>
            <CustomAction Id="tAct07" BinaryKey="VbsAct" VBScriptCall="fAct07" Execute="deferred"  Return="check"></CustomAction>
            <CustomAction Id="tAct08" BinaryKey="VbsAct" VBScriptCall="fAct08" Execute="commit"    Return="check"></CustomAction>
            <CustomAction Id="tAct09" BinaryKey="VbsAct" VBScriptCall="fAct09" Execute="immediate" Return="check"></CustomAction>
            <CustomAction Id="tAct10" BinaryKey="VbsAct" VBScriptCall="fAct10" Execute="deferred"  Return="check"></CustomAction>
            <InstallExecuteSequence>
                <Custom Action="tAct01" After="InstallFiles"></Custom>
                <Custom Action="tAct02" After="tAct01"></Custom>
                <Custom Action="tAct03" After="tAct02"></Custom>
                <Custom Action="tAct04" After="tAct03"></Custom>
                <Custom Action="tAct05" After="tAct04"></Custom>
                <Custom Action="tAct06" After="tAct05"></Custom>
                <Custom Action="tAct07" After="tAct06"></Custom>
                <Custom Action="tAct08" After="tAct07"></Custom>
                <Custom Action="tAct09" After="tAct08"></Custom>
                <Custom Action="tAct10" After="tAct09"></Custom>
            </InstallExecuteSequence>
    
            <Feature Id="ProductFeature" Title="Part13_01" Level="1">
                <ComponentGroupRef Id="ProductComponents" />
            </Feature>
        </Product>
    
        <Fragment>
            <Directory Id="TARGETDIR" Name="SourceDir">
                <Directory Id="ProgramFilesFolder">
                    <Directory Id="INSTALLFOLDER" Name="Part13_01" />
                </Directory>
            </Directory>
        </Fragment>
    
        <Fragment>
            <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
                <Component Id="cExe" Guid="1A30F257-0709-4D57-AFAE-54EC1A44C196">
                    <File Id="fExe" Source="C:\Windows\System32\calc.exe" KeyPath="yes"/>
                </Component>
            </ComponentGroup>
        </Fragment>
    </Wix>
    
    소스를 구축하려면 다른 VBScript2 파일3이 필요합니다.
    customAct.vbs
    Function fAct01()
      MsgBox("Action1 immediate")
      fAct01 = 1
    End Function
    
    Function fAct02()
      MsgBox("Action2 rollback")
      fAct02 = 1
    End Function
    
    Function fAct03()
      MsgBox("Action3 deferred")
      fAct03 = 1
    End Function
    
    Function fAct04()
      MsgBox("Action4 immediate")
      fAct04 = 1
    End Function
    
    Function fAct05()
      MsgBox("Action5 commit")
      fAct05 = 1
    End Function
    
    Function fAct06()
      MsgBox("Action6 rollback")
      fAct06 = 1
    End Function
    
    Function fAct07()
      MsgBox("Action7 deferred")
      fAct07 = 1
    End Function
    
    Function fAct08()
      MsgBox("Action8 commit")
      fAct08 = 1
    End Function
    
    Function fAct09()
      MsgBox("Action9 immediate")
      fAct09 = 1
    End Function
    
    Function fAct10()
      MsgBox("Action10 deferred")
      fAct10 = 1
    End Function
    
    이 설치를 실행하면 사용자 정의 동작을 실행할 때마다 대화상자4가 표시되기 때문에 사용자 정의 동작의 실행 순서를 볼 수 있습니다.초기 상태에서 모든 사용자 정의 동작의 반환 값이 정상적으로 끝났습니다. (반환 값 일람표는 여기. 이기 때문에 설치에 오류가 없습니다.
    여기에 fAct07() 함수 내fAct07 = 1를 오류fAct07 = 3로 바꾸면 굴러가는 상황을 관찰할 수 있다.나는 잘못된 부분을 바꾸고 실제로 행동하면 이해가 깊어질 것이라고 생각한다.
    이전 글로 이동    디렉토리로 이동    다음 글로 이동
    다른 곳에서 사용자 정의 동작을 실행하면 항상 즉시 실행됩니다. 
    실험을 위해 특수 작업 VSScript와 JScript를 쓰는 것은 시간을 절약할 수 있지만, 정식 설치 프로그램에서 절대 사용하지 마십시오.사용자의 환경에 따라 실행할 수 없는 상황이 있다. 
    Visual Studio 기능을 사용하여 파일을 다시 만들면 BOM 부착 UTF8 형식의 파일이 만들어집니다.VBScript 및 JScript는 Shift-JIS 형식의 파일이어야 합니다.실행할 때 엉뚱한 착오가 생겨 실험이지만 고민이다. 
    부모 창이 바탕 화면이기 때문에 표시되는 대화 상자는 설치 프로그램 대화 상자 뒤에 숨겨집니다.다운된 것으로 오해했으니 조급해하지 마라! 

    좋은 웹페이지 즐겨찾기