다음을 통해 공유


스크립트를 사용하여 프로비저닝 패키지에 데스크톱 앱 설치

이 연습에서는 Windows 클라이언트 프로비저닝 패키지에 스크립트를 포함하여 Win32 애플리케이션을 설치하는 방법을 설명합니다. 앱 설치 이외의 스크립팅된 작업도 수행할 수 있습니다. 그러나 스크립트를 실행하는 동안 의도하지 않은 동작을 방지하기 위해 일부 주의가 필요합니다(아래 설명 참조).

응용 프로그램 자산 어셈블

  1. 패키지를 작성하는 디바이스에서 모든 자산을 알려진 위치에 배치합니다. 모든 파일이 장치에서 동일한 임시 디렉터리에 복사되므로 각 자산에는 고유한 파일 이름이 있어야 합니다. 많은 앱에 'install.exe' 또는 이와 유사한 설치 관리자가 있는 것이 일반적이며, 그 때문에 이름이 겹칠 수 있습니다. 이 문제를 해결하려면 다음 단계에 설명된 기술을 사용하여 장치의 임시 디렉터리로 확장되는 전체 디렉터리 구조를 포함시킬 수 있습니다. 가장 일반적으로 사용하는 방법은 각 응용 프로그램에 하위 디렉터리를 포함시키는 것입니다.

  2. 파일의 디렉터리 구조를 포함해야 하는 경우 프로비저닝 패키지에 쉽게 포함하려면 자산을 cab해야 합니다.

응용 프로그램 자산 가져오기

  1. .DDF 아래와 같이 파일을 만들고 file1file2를 패키지할 파일로 바꾸고 파일/디렉터리의 이름을 추가합니다.

    ;*** MSDN Sample Source Code MakeCAB Directive file example
    ;
    .OPTION EXPLICIT  ; Generate errors on variable typos
    .set DiskDirectoryTemplate=CDROM  ; All cabinets go in a single directory
    .Set MaxDiskFileCount=1000; Limit file count per cabinet, so that
    ; scanning is not too slow
    .Set FolderSizeThreshold=200000   ; Aim for ~200K per folder
    .Set CompressionType=MSZIP
    ;** All files are compressed in cabinet files
    .Set Cabinet=on
    .Set Compress=on
    ;-------------------------------------------------------------------
    ;** CabinetNameTemplate = name of cab
    ;** DiskDirectory1 = output directory where cab will be created
    ;-------------------------------------------------------------------
    .Set CabinetNameTemplate=tt.cab
    .Set DiskDirectory1=.
    ;-------------------------------------------------------------------
    ; Replace <file> with actual files you want to package
    ;-------------------------------------------------------------------
    <file1>
    <file2>
    ;*** <the end>
    
  2. makecab을 사용하여 cab 파일을 생성합니다.

    Makecab -f <path to DDF file>
    

스크립트를 생성하여 응용 프로그램 설치

응용 프로그램을 설치하기 위해 필요한 작업을 수행하는 스크립트를 만듭니다. 다음 예제에서는 필수 설치 관리자를 실행하는 조정자 스크립트 작성을 시작하는 데 도움이 되는 방법을 보여 줍니다. 실제로 조정자 스크립트는 이러한 예제보다 더 많은 자산을 참조할 수 있습니다.

오케스트레이터 스크립트를 만들 필요가 없습니다. 앱당 명령줄 하나를 사용할 수 있습니다. 필요한 경우 전체 프로비전 패키지에 조정자 스크립트 하나 대신 아래 설명처럼 앱마다 출력을 기록하는 스크립트를 만들 수 있습니다.

참고

  • 스크립트가 수행하는 모든 작업은 자동으로 진행되어야 하며, UI를 표시하지 않고 사용자 조작이 필요하지 않습니다.
  • 스크립트는 장치에서 시스템 컨텍스트에 따라 실행됩니다.

디버깅 예제

세분화된 로깅은 기본 제공되지 않으므로 스크립트 자체에 로깅을 빌드해야 합니다. 로그파일로 로그 Hello World 하는 예제 스크립트는 다음과 같습니다. 로그 파일은 장치에서 실행될 때 프로비전이 완료된 후에 사용할 수 있습니다. 다음 예제에서 볼 수 있듯이 스크립트가 수행하는 각 작업을 기록하는 것이 좋습니다.

set LOGFILE=%SystemDrive%\HelloWorld.log
echo Hello, World >> %LOGFILE%

.exe 예제

이 예제 스크립트는 시스템 드라이브에 로그 출력 파일을 만들고, 설치 관리자에서 .exe 앱을 설치하고, 결과를 로그 파일에 에코하는 방법을 보여줍니다.

set LOGFILE=%SystemDrive%\Fiddler_install.log
echo Installing Fiddler.exe >> %LOGFILE%
fiddler4setup.exe /S >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

.msi 예제

이전 설치 관리자와 동일하지만 MSI 설치 관리자에서 앱을 설치합니다. 프로비저닝 패키지에서 스크립트 실행에 대한 자동 요구 사항을 충족하기 위해 msiexec가 /quiet 플래그와 함께 호출됩니다.

set LOGFILE=%SystemDrive%\IPOverUsb_install.log
echo Installing IpOverUsbInstaller.msi >> %LOGFILE%
msiexec /i IpOverUsbInstaller.msi /quiet >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

PowerShell 예제

프로비저닝 명령 설정에서 PowerShell 스크립트를 실행하는 방법을 보여 주는 로깅이 포함된 예제 스크립트입니다. 이 예제에서 참조하는 PowerShell 스크립트도 패키지에 포함되어야 하며 프로비저닝 패키지 내에서 실행되는 모든 스크립트와 동일한 요구 사항을 준수해야 합니다. 사용자 상호 작용 없이 자동으로 실행되어야 합니다.

set LOGFILE=%SystemDrive%\my_powershell_script.log
echo Running my_powershell_script.ps1 in system context >> %LOGFILE%
echo Executing "PsExec.exe -accepteula -i -s cmd.exe /c powershell.exe my_powershell_script.ps1" >> %LOGFILE%
PsExec.exe -accepteula -i -s cmd.exe /c 'powershell.exe my_powershell_script.ps1' >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

.CAB에서 추출 예제

이 예제 스크립트는 프로비저닝 명령 스크립트에서 .cab 확장 및 확장된 setup.exe 설치를 보여 줍니다.

set LOGFILE=%SystemDrive%\install_my_app.log
echo Expanding installer_assets.cab >> %LOGFILE%
expand -r installer_assets.cab -F:* . >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%
echo Installing MyApp >> %LOGFILE%
setup.exe >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

패키지에서 여러 스크립트 호출

프로비저닝 패키지에는 여러 CommandFile이 포함될 수 있습니다.

프로비저닝 패키지당 하나의 CommandLine 이 허용됩니다. 위에 표시된 배치 파일은 설치를 관리하고 프로비전 패키지에 포함된 다른 스크립트를 호출하는 조정자 스크립트입니다. 오케스트레이터 스크립트는 패키지에 지정된 CommandLine 에서 호출해야 하는 스크립트입니다.

다음은 위의 PowerShell 예제를 사용하여 이 관계를 설명하는 표입니다.

ICD 설정 설명
ProvisioningCommands/DeviceContext/CommandLine cmd /c PowerShell_Example.bat 조정자 스크립트를 호출하는 데 필요한 명령줄입니다.
ProvisioningCommands/DeviceContext/CommandFiles PowerShell_Example.bat 필수 설치 관리자 호출 또는 cab 파일 확장과 같은 기타 작업 수행을 호출하는 명령줄에서 참조하는 단일 조정자 스크립트입니다. 이 스크립트는 필수 로깅 작업을 수행해야 합니다.
ProvisioningCommands/DeviceContext/CommandFiles my_powershell_script.ps1 조정자 스크립트에서 참조하는 기타 자산입니다. 이 예제에서는 하나만 있지만 여기에 참조되는 자산이 많을 수 있습니다. 일반적인 사용 사례 중 하나는 일련의 install.exe 또는 setup.exe 설치 관리자를 호출하여 몇 가지 응용 프로그램을 설치하는 조정자를 사용하는 것입니다. 각 설치 관리자는 여기에 자산으로 포함되어야 합니다.

프로비저닝 패키지에 스크립트 추가

일괄 처리 파일을 작성하고 참조된 자산을 포함할 준비가 되면 Windows 구성 디자이너의 프로비저닝 패키지에 추가할 수 있습니다.

Windows 구성 디자이너를 사용하여 프로비전 패키지의 CommandLine 설정에서 스크립트가 실행되는 방식에 대한 전체적인 세부 정보를 지정합니다. 여기에는 플래그 또는 명령줄에 일반적으로 입력하는 기타 매개 변수가 포함됩니다. 예를 들어 패키지에 install.exe 앱 설치 관리자 및 InstallMyApp.bat 설치 자동화에 사용되는 스크립트가 포함된 경우 ProvisioningCommands/DeviceContext/CommandLine 설정을 다음과 같이 구성해야 합니다.

cmd /c InstallMyApp.bat

Windows 구성 디자이너에서는 다음과 같은 모습입니다.

선택한 사용자 지정의 명령줄입니다.

또한 조정자 스크립트를 포함하는 명령줄에 대한 관련 자산 및 설치 관리자나 .cab 파일 등 조정자 스트립트가 참조하는 기타 자산을 추가해야 합니다.

이 작업을 수행하려면 Windows 구성 디자이너의 ProvisioningCommands/DeviceContext/CommandFiles 설정에서 파일을 추가하면 됩니다.

선택한 사용자 지정의 명령 파일입니다.

완료되면 패키지를 빌드합니다.

설명

  1. 사용자 조작 또는 콘솔 출력은 ProvisioningCommands를 통해 지원되지 않습니다. 모든 작업은 자동으로 수행되어야 합니다. 스크립트가 다음 중 어느 것을 수행하려고 하면 정의되지 않은 동작이 발생하며 설치 또는 기본 제공 환경 중에 실행되는 경우 디바이스를 복구할 수 없는 상태로 전환할 수 있습니다.

    1. 콘솔에 에코
    2. 화면에 아무것도 표시
    3. 사용자에게 대화 상자를 표시하거나 마법사 설치
  2. 처음 부팅할 때 적용하면 사용자 컨텍스트가 설정되기 전에 프로비전이 부팅 시퀀스에서 미리 실행되므로 이때 실행되는 설치 관리자만 포함하도록 주의해야 합니다. 다른 설치 관리자는 관리 도구를 통해 프로비전할 수 있습니다.

  3. 잘못된 스크립트로 인해 디바이스를 복구할 수 없는 상태로 전환되는 경우 Windows 클라이언트에서 복구 옵션을 사용하여 디바이스를 다시 설정할 수 있습니다.

  4. 디바이스에서 CommandFile 자산은 각 패키지의 고유한 임시 폴더로 배포됩니다.

    1. 기본 제공 환경 중에 추가된 패키지의 경우 일반적으로 %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

      After Commands\0 설치 순서를 참조하고 설치할 첫 번째 앱을 나타냅니다. 패키지의 앱마다 숫자가 커집니다.

    2. 이미 배포된 디바이스를 두 번 클릭하여 추가한 패키지의 경우 프로비저닝 패키지를 실행하는 사용자의 임시 폴더에 있습니다. %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

  5. 명령줄은 CommandFiles가 작업 디렉터리로 배포된 디렉터리와 함께 실행됩니다. 즉 명령줄 또는 스크립트에서 자산에 대한 전체 경로를 지정할 필요가 없습니다.

  6. 런타임 프로비전 구성 요소는 PPKG가 추가된 단계에 따라 가장 빠른 시점에 프로비전 패키지의 스크립트를 실행하려고 시도합니다. 예를 들어 첫 실행 경험 동안 패키지가 추가된 경우 패키지가 적용되는 즉시 스크립트가 실행되고 첫 실행 경험이 계속 진행됩니다. 이는 사용자 계정 구성 옵션이 사용자에게 표시되기 전입니다. 회전 진행률 대화 상자가 나타나고 화면에 "기다려 주세요"가 표시됩니다.

    참고

    이때 프로비전 프로세스에 30분의 시간 제한이 있으므로 모든 스크립트 실행 및 설치를 시간 내에 완료해야 합니다.

  7. 스크립트는 백그라운드에서 실행되므로 나머지 프로비전 작업이 계속 실행됩니다. 두 번 클릭하여 설치를 사용하여 기존 시스템에 추가된 패키지의 경우 프로비전 또는 스크립트 실행이 완료되었다는 알림이 없습니다.

다음 단계

프로비저닝 패키지 적용에 대해 자세히 알아보세요.

프로비저닝 패키지 적용