You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

注册多个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的组合可唯一标识后台任务,但异常提示存在重复操作,现提出以下问题:

  1. 应用是否可以注册多个BackgroundTask?
  2. 若可以,导致该异常的问题出在哪里?
  3. 为何两个任务的Run方法都从未被调用?

内容的提问来源于stack exchange,提问作者Brian A. Henning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:32:07