Сбой регистрации фоновой задачи - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу перехватывать необработанные push-сообщения в фоновом процессе.Когда я пытаюсь его зарегистрировать, я получаю следующее исключение:

HResult -2147221164
Сообщение «Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))»

Код выглядит следующим образом:

    public sealed class NotificationsTask : IBackgroundTask {
    static private String sName = typeof(NotificationsTask).Name;
    static private readonly String TAG = sName;
    public void Run(IBackgroundTaskInstance taskInstance) {
      RawNotification notification = (RawNotification) taskInstance.TriggerDetails;
      String msg = notification.Content;
    }
    async static public void Register() {
      var Status = BackgroundExecutionManager.GetAccessStatus();
      Boolean OKToRegister = true;
      switch (Status) {
        case BackgroundAccessStatus.DeniedByUser:
        case BackgroundAccessStatus.Unspecified:
        case BackgroundAccessStatus.DeniedBySystemPolicy:
          OKToRegister = false;
          Status = await BackgroundExecutionManager.RequestAccessAsync();
          switch (Status) {
            case BackgroundAccessStatus.AllowedSubjectToSystemPolicy:
            case BackgroundAccessStatus.AlwaysAllowed:
              OKToRegister = true;
              break;
          }
          break;
      }
      if (OKToRegister) {
        Boolean found = false;
        foreach (var task in BackgroundTaskRegistration.AllTasks) {
          if (task.Value.Name == sName) {
            found = true;
            break;
          }
        }
        if (!found) {
          try {
            var builder = new BackgroundTaskBuilder();
            builder.TaskEntryPoint = typeof(NotificationsTask).FullName;
            builder.Name = sName;
            builder.SetTrigger(new PushNotificationTrigger());
            builder.Register();
          } catch (Exception e) {
            PersistLog.e(TAG, "Register:" + e);
          }
        }
      }
    }

    static public void UnRegister() {
      BackgroundExecutionManager.RemoveAccess();
      foreach (var task in BackgroundTaskRegistration.AllTasks) {
        if (task.Value.Name == sName) {
          task.Value.Unregister(true);
          break;
        }
      }
    }
}

Я пробовал запуск по таймеру, тот же результат.В моем тестовом примере я всегда вызываю метод UnRegister перед вызовом метода Register.Он не находит ранее зарегистрированный класс.

Я пытался добавить в файл манифеста:

    <Extension Category="windows.backgroundTasks" EntryPoint="General.NotificationsTask">
      <BackgroundTasks>
        <Task Type="pushNotification" />
      </BackgroundTasks>
    </Extension>

Но затем я получаю сообщение об ошибке:

Ошибка проверки.ошибка 80080204: ошибка проверки манифеста приложения: строка 33, столбец 12, причина: если это не фоновая задача аудио, ей не разрешено использовать EntryPoint без ActivatableClassI

1 Ответ

0 голосов
/ 12 апреля 2019

Сначала я должен был загрузить пример решения в Visual Studio!Моя проблема заключалась в том, что я не помещал свои задачи в их собственную сборку, которую можно было бы зарегистрировать и динамически загрузить как объекты COM.

Я не помню, чтобы это было видно в документации ... но это очевидно, когда вы просматриваетеструктура проекта «Образцы фоновых задач».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...