Фоновая задача TimeTrigger не запускается в WinUI 3 с использованием COM-сервера CsWinRTC#

Место общения программистов C#
Ответить
Anonymous
 Фоновая задача TimeTrigger не запускается в WinUI 3 с использованием COM-сервера CsWinRT

Сообщение Anonymous »

Сводка проблемы
Я пытаюсь запустить внепроцессную фоновую задачу WinUI 3 (.NET 9) с помощью WindowsAppSDKBackgroundTask + COM/CsWinRT. Регистрация прошла успешно, но команда «Выполнить» задачи никогда не вызывается. Средство просмотра событий показывает:

Фоновая задача для пакета
50438Sample.ProjectBG_1.0.1.0_x64__gn74awtjnb632 с точкой входа
Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.Task не выполнена
в ответ на отмену уведомление.

Ниже приведены соответствующие фрагменты и этапы проверки.
.csproj (проект фоновой задачи)

Код: Выделить всё

net9.0-windows10.0.22621.0
true
true
ProjectX.BackgroundTask.WallpaperTask

Выполнение задачи

Код: Выделить всё

[ComVisible(true)]
[Guid("12345678-1234-1234-1234-123456789abc")]
public sealed class WallpaperTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
try
{
// Breakpoint never hit, logging never executes
}
finally
{
deferral?.Complete();
}
}
}
package.appxmanifest (соответствующие части) Регистрационный код

Код: Выделить всё

var builder = new BackgroundTaskBuilder();
builder.Name = "WallpaperBackgroundTask";
builder.SetTaskEntryPointClsid(Guid.Parse("12345678-1234-1234-1234-123456789abc"));
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register(); // no exception thrown
Что я проверил
  • WinRT.Host.dll, .winmd и UniversalBGTask.dll упакованы.
  • CLSID в манифесте соответствует GUID класса.
  • Фоновая задача отображается в задаче Планировщик.
  • Регистрация возвращает BackgroundTaskRegistration (без исключения).
Среда
WinUI 3, .NET 9
Windows App SDK 1.6.x
Windows 11
Вопрос
Почему команда «Выполнить» никогда не выполняется, даже если регистрация прошла успешно? Может ли это быть проблемой активации/конфигурации манифеста COM для внепроцессных задач с использованием CsWinRT? Что еще мне следует проверить или изменить, чтобы позволить суррогату COM активировать фоновую задачу?
Минимальное воспроизведение/шаги для воспроизведения
(Пример проекта доступен ЗДЕСЬ)
Запустите приложение.
Нажмите кнопку «Зарегистрировать» (которая запускает регистрационный код).
Оставьте приложение/Visual Studio открытым и подождите ~15 минут.
Обратите внимание на сбой фоновой задачи и запись средства просмотра событий в разделе:
Журналы приложений и служб → Microsoft → Windows → BackgroundTaskInfrastructure → Operational.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... com-server
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»