사전 설치 작업
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 매니페스트 스키마를 사용하도록 설정합니다. |