注册多个UWP后台任务时抛出0x800700B7错误及任务不执行问题
后台任务注册异常与执行问题
问题现象
尝试注册两个独立的后台任务时出现以下问题:
- 第一个任务注册成功,但注册第二个任务时抛出异常:
Cannot create a file when that file already exists. (Exception from HRESULT: 0x800700B7) - 已注册成功的第一个任务,无论在调用其触发器的
RequestAsync(返回Allowed)前后,其Run方法从未被执行。
已确认注册过程中未复用ApplicationTrigger实例,每个任务都使用独立的触发器。
AppxManifest配置
两个任务已在appxmanifest中完成注册:
<Package> [ ... ] <Extensions> <Extension Category="windows.activatableClass.inProcessServer"> <InProcessServer> <Path>UI.exe</Path> <ActivatableClass ThreadingModel="MTA" ActivatableClassId="BackgroundTasks.BackgroundTaskOne" /> <ActivatableClass ThreadingModel="MTA" ActivatableClassId="BackgroundTasks.BackgroundTaskTwo" /> </InProcessServer> </Extension> </Extensions> [ ... ] <Applications> <Application Id="App" [...] > [...] <Extensions> <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.BackgroundTaskOne"> <BackgroundTasks> <Task Type="general" /> </BackgroundTasks> </Extension> <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.BackgroundTaskTwo"> <BackgroundTasks> <Task Type="general" /> </BackgroundTasks> </Extension> </Extensions> </Application> </Applications> </Package>
注:对ThreadingModel理解不足,已尝试Intellisense建议的STA和both选项,但行为无变化。
后台任务类定义
每个任务类的签名如下(以BackgroundTaskOne为例):
public sealed class BackgroundTaskOne : IBackgroundTask
BackgroundTaskTwo的类结构与上述完全一致。
注册代码
两个任务使用相同的注册逻辑:
var requestTask = BackgroundExecutionManager.RequestAccessAsync().AsTask(); requestTask.Wait(); var builder = new BackgroundTaskBuilder(); builder.Name = GetType().Name; builder.TaskEntryPoint = GetType().FullName; // builder.IsNetworkRequested = true; builder.SetTrigger(trigger); try { registration = builder.Register(); return true; } catch(Exception ex) { Log.Logger.Error($"BackgroundTaskBuilder.Register: {ex.Message}"); Log.Logger.Information($"Name: {builder.Name}"); Log.Logger.Information($"TaskEntryPoint: {builder.TaskEntryPoint}"); return false; }
核心疑问
原以为Name和TaskEntryPoint的组合可唯一标识后台任务,但异常提示存在重复操作,现提出以下问题:
- 应用是否可以注册多个BackgroundTask?
- 若可以,导致该异常的问题出在哪里?
- 为何两个任务的
Run方法都从未被调用?
内容的提问来源于stack exchange,提问作者Brian A. Henning
相关产品推荐
相关产品推荐

