locked
Помогите с фоновыми задачами. BACKGROUNDTASKHOST.EXE" завершилась с кодом 1 (0x1) RRS feed

  • Вопрос

  • Пытаюсь прилепить к своему WP8.1-проекту фоновую задачу, которая будет выполняться раз в полчаса:

    TimeTrigger timetrigger = new TimeTrigger(30, false);
    
    SystemCondition condition = new SystemCondition(SystemConditionType.InternetAvailable);
    
    var builder = new BackgroundTaskBuilder();
    
    builder.Name = "ProverkaNalichiyaNovyhPisem";
    builder.TaskEntryPoint = "FonovyeZadachi.ProverkaNalichiyaNovyhPisem";
    builder.SetTrigger(timetrigger);
    builder.AddCondition(condition);
    
    BackgroundTaskRegistration proverkanalichiyanovyhpisem = RegisterBackgroundTask(builder);

    Вот как в общих чертах выглядит сама фоновая задача:

    namespace FonovyeZadachi
    {
        public sealed class ProverkaNalichiyaNovyhPisem : IBackgroundTask
        {
            public async void Run(IBackgroundTaskInstance taskInstance)
            {
                try
                {
                    BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
    
                    //здесь сама реализация задачи
    
                    _deferral.Complete();
                }
                catch (Exception ex)
                {
    
                }
            }
        }
    }

    Думаю, код самой реализации задачи неважен, ибо у меня проблема возникает если там просто написать две строчки

    int i;
    i++;

    Проблема в том, что задача отрабатывается только в эмуляторе при принудительном запуске. На моём телефоне - почему-то нет.

    Вот, что пишется в отладке:

    "BACKGROUNDTASKHOST.EXE" (CoreCLR: DefaultDomain). Загружено "C:\windows\system32\mscorlib.ni.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\Data\SharedData\PhoneTools\AppxLayouts\409f3efe-c97f-46ef-a9ee-d9d1f4bec1fbVS.Debug_AnyCPU.eugen\FonovyeZadachi.winmd". Символы загружены.
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\WinMetadata\Windows.winmd". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.INTEROPSERVICES.WINDOWSRUNTIME.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.THREADING.TASKS.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\Data\SharedData\PhoneTools\AppxLayouts\409f3efe-c97f-46ef-a9ee-d9d1f4bec1fbVS.Debug_AnyCPU.eugen\Newtonsoft.Json.DLL". Невозможно найти или открыть PDB-файл.
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.LINQ.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.CORE.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.COLLECTIONS.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\Data\SharedData\PhoneTools\AppxLayouts\409f3efe-c97f-46ef-a9ee-d9d1f4bec1fbVS.Debug_AnyCPU.eugen\Klassy.DLL". Символы загружены.
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\System.Runtime.WindowsRuntime.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\System.Net.Http.ni.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\System.Net.Http.Phone.ni.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\System.Net.Primitives.ni.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\System.Net.ni.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.TEXT.ENCODING.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.SERIALIZATION.PRIMITIVES.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.SERIALIZATION.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "Anonymously Hosted DynamicMethods Assembly". 
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\en-US\mscorlib.debug.resources.dll". Модуль был построен без символов.
    Поток 0xc54 завершился с кодом 0 (0x0).
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.GLOBALIZATION.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    Программа "[3608] BACKGROUNDTASKHOST.EXE" завершилась с кодом 1 (0x1).
    Поток 0xec4 завершился с кодом 259 (0x103).
    Поток 0xfb8 завершился с кодом 259 (0x103).

    Подозреваю, что дело всё в завершении задачи:BACKGROUNDTASKHOST.EXE" завершилась с кодом 1 (0x1). В интернете как-то мало информации с примерами подобного завершения задачи.

    Собственно, что интересует: то, что отображается в процессе отладки - это нормально? Куда рыть?

    20 июля 2015 г. 6:13

Ответы

  • По всей видимости, проблема была лишь в том, что я банально не попросил разрешения на вывод уведомлений перед регистрацией фоновой задачи:

    await BackgroundExecutionManager.RequestAccessAsync();

    • Помечено в качестве ответа Eugene Razmanov 23 июля 2015 г. 3:41
    23 июля 2015 г. 3:41

Все ответы

  • А вы правильно описали вашу задачу в манифесте приложения? Прописали в нем, что у вас есть фоновая задача, подписались на нужное событие и указали точку входа в событие....
    20 июля 2015 г. 7:12
  • Думаю, да.

    20 июля 2015 г. 7:16
  • А в обозревателе решений фоновая задача и сам файл с задачей называются так же? Я помню, что когда добавляла себе триггер на уведомления, то много времени потратила на названия...
    20 июля 2015 г. 7:29
  • Да. Я это копипастом прописывал в манифесте. Сейчас ещё раз везде проверил - всё совпадает.
    20 июля 2015 г. 7:35
  • Пример я брала тут. Сначала провозилась с наименованием, а потом с тем что проект фоновой задачи нужно постоянно собирать и перестраивать отдельно от основного проекта.
    20 июля 2015 г. 7:58
  • Ок, будет время - гляну. Заранее спасибо :)
    20 июля 2015 г. 8:02
  • Пример я брала тут. Сначала провозилась с наименованием, а потом с тем что проект фоновой задачи нужно постоянно собирать и перестраивать отдельно от основного проекта.

    Всё равно с тем же кодом завершается, если принудительно запустить задачу:

    "BackgroundTask.WindowsPhone.exe" (CoreCLR: DefaultDomain). Загружено "C:\windows\system32\mscorlib.ni.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\Data\SharedData\PhoneTools\AppxLayouts\4C1BAE2E-D81A-4E7F-B03E-9A0EA91A2248VS.Debug_AnyCPU.eugen\BackgroundTask.WindowsPhone.exe". Символы загружены.
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\WinMetadata\Windows.winmd". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.INTEROPSERVICES.WINDOWSRUNTIME.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.THREADING.TASKS.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\System.Runtime.WindowsRuntime.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.COLLECTIONS.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BackgroundTask.WindowsPhone.exe" (CoreCLR: .). Загружено "C:\windows\system32\en-US\mscorlib.debug.resources.dll". Модуль был построен без символов.
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: DefaultDomain). Загружено "C:\windows\system32\mscorlib.ni.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\Data\SharedData\PhoneTools\AppxLayouts\4C1BAE2E-D81A-4E7F-B03E-9A0EA91A2248VS.Debug_AnyCPU.eugen\Tasks.winmd". Символы загружены.
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\WinMetadata\Windows.winmd". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.RUNTIME.INTEROPSERVICES.WINDOWSRUNTIME.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.DIAGNOSTICS.DEBUG.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\SYSTEM.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    Background SampleBackgroundTask Starting...
    "BACKGROUNDTASKHOST.EXE" (CoreCLR: .). Загружено "C:\windows\system32\System.Runtime.WindowsRuntime.NI.DLL". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
    Background SampleBackgroundTaskCompleted
    Программа "[3656] BACKGROUNDTASKHOST.EXE" завершилась с кодом 1 (0x1).
    Поток 0x840 завершился с кодом 259 (0x103).
    

    Та же картина, если запускать Windows-приложение.

    А может так и надо, и фоновый процесс у меня не работает по другой причине? У вас этот пример с тем же кодом завершается?

    21 июля 2015 г. 17:07
  • Вот здесь: http://stackoverflow.com/questions/25942340/backgroundtaskhost-exe-has-exited-with-code-1-0x1-geofence-issue

    кажется написано, как решить проблему, но мои знания английского и программирования не позволяют до конца понять ответ:

    Adding the missing reference to my Tasks-Assembly (winmd) Project in the WP8 Project solved it.

    22 июля 2015 г. 5:30
  • А может так и надо, и фоновый процесс у меня не работает по другой причине? У вас этот пример с тем же кодом завершается?
    Я для своего приложения WinGeoChat использовала RawNotification так как данный фоновый процесс имеет ограничений меньше других фоновых процессов. Приложение для WinRT, но принцип то вроде как общий... Для Raw необходим доступ к экрану блокировки, иконка на экран блокировки. Сама фоновая задача. Добавление ссылки на фоновую задачу в манифесте, вызов из программы с точным совпадением имен. И в разделе References добавить ссылку на фоновую задачу. Вот вроде и все действия... Если у вас с наименованиями все в порядке, то проверьте правильность подключения в References. А так уже и не знаю, что еще посмотреть...
    22 июля 2015 г. 9:49
  • Ничего не понимаю. Вроде всё сделано правильно. Плюс смущает, что пример из ссылки, которую вы приводили выше, тоже завершается с тем же кодом. Сдаётся мне, что здесь не в проекте дело, а в каких-то настройках Visual Studio.

    Скажите, у вас в том проекте-образце из ссылки фоновая задача, если запустить её принудительно, с каким кодом завершается?

    22 июля 2015 г. 10:58
  • Какой конкретно пример вы пробуете?
    22 июля 2015 г. 14:38
  • Я правильно понимаю, что речь идет о "Background task sample"? Да, у меня в отладчике так же выводится... Сами фоновые процессы отрабатывают свои триггеры...
    22 июля 2015 г. 15:08
  • Да, Background task sample.

    То есть, у вас тоже с кодом 1 (0х1) завершается процесс? Значит, у меня дело в чём-то другом...

    22 июля 2015 г. 15:10
  • Т.е. у вас не после нажатия кнопки регистрации фоновой задачи и срабатывания конкретного триггера не появляется прогресс выполняющийся до 100% ? Допустим в триггере про часовой пояс, меняете часовой пояс и видите прогресс... Для наглядности лучше экран поделить на две части...
    22 июля 2015 г. 15:48
  • По всей видимости, проблема была лишь в том, что я банально не попросил разрешения на вывод уведомлений перед регистрацией фоновой задачи:

    await BackgroundExecutionManager.RequestAccessAsync();

    • Помечено в качестве ответа Eugene Razmanov 23 июля 2015 г. 3:41
    23 июля 2015 г. 3:41