locked
Background Task registration failed RRS feed

  • Вопрос

  • Не могу зарегистрировать бэкграунд таск. Смотрел пример с мсдн.

    protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                base.OnNavigatedTo(e);
                DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
                dataTransferManager.DataRequested += dataTransferManager_DataRequested;
    
                CheckBackgroundTaskRegistration();
            }
    
            private void CheckBackgroundTaskRegistration()
            {
                bool containsTask = BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == "RssFeedUpdater");
    
                if (!containsTask)
                {
                    RegisterBackgroundTask("RssFeedUpdater", "BackgroundTasks.RssFeedUpdater");
                }
            }
    
            private void RegisterBackgroundTask(string name, string entrypoint)
            {
               BackgroundTaskBuilder btb = new BackgroundTaskBuilder();
                btb.Name = name;
                btb.TaskEntryPoint = entrypoint;
    
                btb.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
    
                btb.SetTrigger(new SystemTrigger(SystemTriggerType.SessionConnected, false));
    
                BackgroundTaskRegistration taskRegistration = btb.Register();
            }

    На строчке BackgroundTaskRegistration taskRegistration = btb.Register(); выпадает с ошибкой "HRESULT: 0x80070005 (E_ACCESSDENIED))"

    Бэкграунд тасковый класс наследуется от IBackgroundTask, реализует метод Run(), является силдовым(sealed) и публичным

    В референсах основного проекта указал ссылку на бэкграунд тасковый. В чем может быть проблема?

    Заранее благодарю

    18 июля 2014 г. 6:14

Ответы

  • Тип стоит SystemEvent. Попробуйте заменить на таймер для теста.
    В COMException  HResult не написало?
    • Изменено Oleg Kurzov 21 июля 2014 г. 8:07
    • Помечено в качестве ответа evgeniy.polonskiy 21 июля 2014 г. 8:16
    21 июля 2014 г. 8:06

Все ответы

  • да, в манифест все добавил
    18 июля 2014 г. 8:26
  • ни у кого нет идей?(
    21 июля 2014 г. 7:26
  • Ну что ж, попробовал у себя - всё нормально зарегистрировалось.

    Давайте по порядку что я делал:

    1. создал проект Windows runtime component с именем WindowsRuntimeComponent1.

    2. В нем создал класс BackgroundClass

    3. в Манифесте обьявил фоновый агент, поставил галочку на Таймер и указал только EntryPoint: WindowsRuntimeComponent1.BackgroundClass

    4. Скопировал Ваш код и только поменял на свои имена, получилось вот что:

    private void CheckBackgroundTaskRegistration()
            {
                bool containsTask = BackgroundTaskRegistration.AllTasks.Any(task => task.Value.Name == "RssFeedUpdater");
    
                if (!containsTask)
                {
                    RegisterBackgroundTask("RssFeedUpdater", "WindowsRuntimeComponent1.BackgroundClass");
                }
            }
    
            private void RegisterBackgroundTask(string name, string entrypoint)
            {
                BackgroundTaskBuilder btb = new BackgroundTaskBuilder();
                btb.Name = name;
                btb.TaskEntryPoint = entrypoint;
    
                btb.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
    
                btb.SetTrigger(new SystemTrigger(SystemTriggerType.SessionConnected, false));
    
                BackgroundTaskRegistration taskRegistration = btb.Register();
            }

    Так что из предположений - проверьте, верно ли Вы указали пути.

    21 июля 2014 г. 7:39
  • Все проверил, все верно, вот здесь видно, что имена совпадают

    При прошении доступа к локскрину приложение тоже падает с ошибкой

    BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();

    COMException was caught: Неопознанная ошибка

    21 июля 2014 г. 8:02
  • Тип стоит SystemEvent. Попробуйте заменить на таймер для теста.
    В COMException  HResult не написало?
    • Изменено Oleg Kurzov 21 июля 2014 г. 8:07
    • Помечено в качестве ответа evgeniy.polonskiy 21 июля 2014 г. 8:16
    21 июля 2014 г. 8:06
  • Ошибка была в SystemEvent, выставив timer получилось.

    HResult написано не было.

    Спасибо большое!

    21 июля 2014 г. 8:13