다음을 통해 공유


사전 설치 작업

OEM 및 MO는 디바이스 이미지에 사전 설치된 앱을 배송할 수 있습니다. 이러한 사전 설치 앱 중 일부는 사용자 상호 작용 없이 작업을 실행해야 하며, 최종 사용자가 앱을 처음으로 열기 전에 작업을 실행해야 하는 경우가 많습니다. 예를 들어 제품 설문 조사 앱 또는 SMS 서버 등록 앱이 있습니다. 마찬가지로 일부 앱은 업데이트 후 사용자 상호 작용 없이 작업 실행을 처리해야 합니다. 사전 설치 및 업데이트 작업은 앱이 설치되거나 업데이트될 때 사용자 상호 작용 없이 백그라운드에서 작업을 실행할 수 있도록 하는 메커니즘을 제공합니다.

UAP에는 PreInstallConfigTask 및 UpdateTask의 두 가지 배포 작업 유형을 사용할 수 있습니다. 둘 다 IBackgroundTasks입니다.

이러한 작업을 제어하는 일반적인 규칙은 다음과 같습니다.

  • 앱 매니페스트에는 PreInstallConfigTask 하나와 UpdateTask 하나만 포함될 수 있습니다.
  • 배포 작업은 모든 플랫폼 유형에 적용할 수 있습니다.
  • 배포 작업이 완료되고 커밋된 후에 배포 작업을 실행할 수 있습니다.
  • 실패한 배포 작업은 다시 시작되지 않습니다.
  • 실패한 배포 작업은 앱의 성공적인 배포에 영향을 미치지 않습니다.
  • 다시 부팅한 후에는 배포 작업이 다시 시작되지 않습니다.
  • 배포 작업은 서로 의존해서는 안 됩니다.

코드 예제

UpdateTask 예제

업데이트 작업은 가능한 모든 업데이트 경로에 대해 지원됩니다. 예를 들면 다음과 같습니다.

  • .xap에서 .xap로
  • .xap에서 .appx로
  • .xap에서 .appxbundle로
  • .appx에서 .appx로
  • .appx에서 .appxbundle로
  • .appxbundle에서 .appxbundle로

예제 .appx 매니페스트는 다음과 같습니다.

<Package>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>App.dll</Path>
        <ActivatableClass ActivatableClassId="App.UpdateTask" ThreadingModel="MTA"/>
      </InProcessServer>
    </Extension>
  </Extensions>

  <Applications>
    <Application>
      <Extensions>
        <Extension Category="windows.updateTask"  EntryPoint="App.UpdateTask">
        </Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

예제 C# 코드는 다음과 같습니다.

public sealed class UpdateTask : IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        var deferral = taskInstance.GetDeferral();
        taskInstance.Canceled +=
            (sender, reason) =>
            {
                cts.Cancel();
            };
        try
        {
            await MigrateApp(); // Do app migration/update steps.
        }
        catch (TaskCanceledException x)
        {
            // do nothing on cancelation.
        }
        deferral.Complete();
    }
}

PreInstallConfigTask 작업 예제

예제 .appx 매니페스트는 다음과 같습니다.

<Package>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>App.dll</Path>
        <ActivatableClass ActivatableClassId="App.PreInstallConfigTask" ThreadingModel="MTA"/>
      </InProcessServer>
    </Extension>
  </Extensions>

  <Applications>
    <Application>
      <Extensions>
        <Extension Category="windows.preInstalledConfigTask"  EntryPoint=" App.PreInstallConfigTask">
        </Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

예제 C# 코드는 다음과 같습니다.

public sealed class PreInstallConfigTask : IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        var deferral = taskInstance.GetDeferral();
        taskInstance.Canceled +=
            (sender, reason) =>
            {
                cts.Cancel();
            };
        try
        {
            await DownloadContactList(); // Do app migration/update steps.
        }
        catch (TaskCanceledException x)
        {
            // do nothing on cancelation.
        }
        deferral.Complete();
    }
}

클래식 Windows 앱의 사전 설치 작업

아래 표와 같이 클래식 Windows 앱에 사용할 수 있는 세 가지 배포 작업 유형이 있습니다. Windows 10에 클래식 Windows 앱을 배포하는 경우 이러한 작업이 예상대로 작동합니다.

Task 설명
PREINSTALL _OEM_TASK 당사자 또는 제2자가 사전 설치한 앱이 최종 사용자에 의해 시작되지 않아도 설치 시 작업을 실행할 수 있습니다.
UPDATE_TASK .appx를 .uap로 업데이트하는 경우를 포함하여 앱을 업데이트한 후에는 사용자 상호 작용 없이도 마이그레이션 관련 작업을 수행하기 위해 서비스 작업을 실행할 수 있습니다.
CONVERGENCE Windows 8.1 및 Windows 8.1 전화 코드 수렴. 또한 통합 .appx 매니페스트 스키마를 사용하도록 설정합니다.