2017-05-12 13 views
1

UWP 응용 프로그램에서 백그라운드 서비스를 실행하려고합니다. 응용 프로그램에 백그라운드 권한이 있는지 먼저 확인합니다. 그렇다면 실행중인 서비스를 등록합니다.UWP가 백그라운드 서비스 예외를 실행하려고합니다.

Visual Studio를 Windows 10 SDK와 함께 크리에이터 업데이트 버전으로 업데이트 할 때까지이 코드가 제대로 작동했습니다. 이제이 업데이트로 백그라운드 서비스를 등록 할 수있는 것들이 변경되는지 알 수 없습니다.

using System; 
using Windows.ApplicationModel.Background; 
using BackgroundService; 
using SampleApp.Config; 

namespace SampleApp.Background 
{ 
    class BackgroundClass 
    { 
     LocalConfig LC = new LocalConfig(); 

     public async void RequestBackgroundAccess() 
     { 
      var result = await BackgroundExecutionManager.RequestAccessAsync(); 

      switch (result) 
      { 
       case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity: 
        break; 
       case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity: 
        break; 
       case BackgroundAccessStatus.Denied: 
        break; 
       case BackgroundAccessStatus.Unspecified: 
        break; 
      } 
     } 

     public async void RegisterBackgroundSync() 
     { 
      var trigger = new ApplicationTrigger(); 
      var condition = new SystemCondition(SystemConditionType.InternetAvailable); 

      if (!LC.BackgroundSyncStatusGET()) 
      { 
       var task = new BackgroundTaskBuilder 
       { 
        Name = nameof(BackgroundSync), 
        CancelOnConditionLoss = true, 
        TaskEntryPoint = typeof(BackgroundSync).ToString(), 
       }; 

       task.SetTrigger(trigger); 
       task.AddCondition(condition); 
       task.Register(); 

       LC.BackgroundSyncStatusSET(true); 
      } 

      await trigger.RequestAsync(); //EXCEPTION HAPPENS AT THIS LINE 
     } 

     public void RegisterBackgroundService(uint time) 
     { 
      var taskName = "BackgroundService"; 

      foreach (var unregisterTask in BackgroundTaskRegistration.AllTasks) 
      { 
       if (unregisterTask.Value.Name == taskName) 
       { 
        unregisterTask.Value.Unregister(true); 
       } 
      } 

      if(time != 0) 
      { 
       var trigger = new TimeTrigger(time, false); 
       var condition = new SystemCondition(SystemConditionType.InternetAvailable); 

       var task = new BackgroundTaskBuilder 
       { 
        Name = nameof(BackgroundService), 
        CancelOnConditionLoss = true, 
        TaskEntryPoint = typeof(BackgroundService).ToString(), 
       }; 

       task.SetTrigger(trigger); 
       task.AddCondition(condition); 
       task.Register(); 
      } 
     } 
    } 
} 

이제 백그라운드 서비스가 등록되어 있는지 확인하면서 다시 등록 할 문제가 있는지 확인하고 있습니다. 나는 함께 System.Runtime.InteropServices.COMException이

HRESULT = 0X80004005

메시지 = 오류 HRESULT E_FAIL이 COM 구성 요소에 대한 호출에서 반환 된 발생


다음과 같은 예외를 얻고있다.

출처 = 윈도우 스택 트레이스 : SampleApp.Background.BackgroundClass.d__2.MoveNext()에서 Windows.ApplicationModel.Background.ApplicationTrigger.RequestAsync()

에서


도와주세요

+0

게시 한 코드가 올바르게 표시됩니다. 여기의 문제는 여기에 없을 수도 있습니다. [Background task sample] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundTask)을 사용해 보셨습니까? 같은 문제가 있습니까? 또한 다른 장치에서 코드를 사용해 볼 수도 있습니다. 여전히 동일한 문제가 발생하면 문제를 재현 할 수 있도록 [mcve]를 공유하는 것이 좋습니다. –

답변

1

내 Windows 10 개인 정보 설정에서 이와 동일한 문제가 발생했습니다. Background apps을 선택

시스템 설정 => 개인 정보 보호는 왼쪽 메뉴에서

을 설정.

앱이 백그라운드 작업 실행을 차단하지 않았는지 확인하십시오.