【问题标题】:How to start background task at boot - Windows Store app如何在启动时启动后台任务 - Windows Store 应用
【发布时间】:2015-11-20 15:43:40
【问题描述】:

我的平板电脑运行 Windows 8.1 pro。

它有一个后台任务,每 15 分钟触发一次时间触发器。它有效,很公平。

问题是我需要在设备的每次启动(启动应用程序)时自动启动我的后台任务。

我通过此代码注册了我的 bg:

       builder.Name = "bikePositionUpdate";
        builder.TaskEntryPoint = "BackgroundTaskGps.BikeGPSPositionUpdateBackgroundTask";
        builder.SetTrigger(new TimeTrigger(15, false)); // 

        // adding condition
        SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
        SystemCondition userPresentCondition = new SystemCondition(SystemConditionType.UserPresent); 

        builder.AddCondition(internetCondition);
        builder.AddCondition(userPresentCondition);
        BackgroundTaskRegistration taskRegistration = builder.Register();

我的应用有锁屏访问权限

         await BackgroundExecutionManager.RequestAccessAsync();

我怎样才能做到这一点?我错过了什么吗?

【问题讨论】:

  • 您需要添加一个可以自动启动的 Windows 服务。如果您构建一个 WixProject 来安装它,您可以从安装程序中进行设置。

标签: c# windows-store-apps background-task


【解决方案1】:

您必须添加SystemConditionType.SessionConnected 条件,每次用户登录 Windows 时都会出现此条件。

必须将应用置于锁定屏幕上才能使用此触发器类型成功注册后台任务。

编辑:

在此网址上,您可以找到有关您需要什么以及如何使用它的官方文档:

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977056.aspx

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.applicationmodel.background.systemtriggertype.aspx

【讨论】:

  • 你亲自尝试过吗?我已经使用了 sessionConnected 条件,当我重新启动设备时,我的 bg 不再触发
  • 是的,它有效。但是您必须先将您的应用放置为外观屏幕,然后才能注册此行为
  • 我把它放在锁屏上,在这里找到一个示例onedrive.live.com/…
  • 乍一看项目,您错过了后台任务声明中的系统事件触发器。您可以按照此 Microsoft 指南了解更多详细信息:msdn.microsoft.com/en-us/library/windows/apps/xaml/…
  • 解决办法是后台任务2个,时间触发1个,系统触发1个。
【解决方案2】:
I think you should add SystemConditionType.SessionConnected condition,where this condition will check every time theuser log on to Windows

【讨论】:

  • 你亲自尝试过吗?我已经使用了 sessionConnected 条件,当我重新启动设备时,我的 bg 不再触发
【解决方案3】:

await BackgroundExecutionManager.RequestAccessAsync(); 的结果应该类似于 AllowedWithAlwaysOnRealTimeConnectivity。

这意味着:用户在对话框中选择了“允许”。应用加入锁屏,可以设置后台任务

还有这个BackgroundTaskRegistration taskRegistration = builder.Register(); 你应该在await BackgroundExecutionManager.RequestAccessAsync();之后打电话

【讨论】:

    【解决方案4】:

    您是否尝试过在注册表中添加它以在启动时运行?

    我没有要检查的 8.1,但如果没有从 win7 更改,则路径应该是 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run(或 HKEY_LOCAL_MACHINE)只需使用您的应用程序的路径创建一个新的字符串值,它将是windows启动时运行

    【讨论】:

    • 不,它适用于桌面应用,但不适用于 Windows 应用商店应用
    【解决方案5】:

    您是否尝试在安装过程中将您的应用程序添加到 Windows 任务计划程序?

    【讨论】:

    • 认为这可能会有所帮助。很久以前遇到过类似的问题。只是为了让你不要以为我不知道我在说什么。这是一个将我的 Cycler.exe 添加到 Windows 启动的 sn-p。 : 'System.Diagnostics.Process.Start("schtasks", @"/Create /V1 /F /RU ""NT AUTHORITY\SYSTEM"" /TN OEMcycler /SC ONSTART /TR %windir%\system32\oobe\info\背景\Cycler.exe");'
    • 如果将其安装在商业\商业环境中的某人系统上或分发,将其作为计划任务而不是正确的解决方案。您需要将其作为 Windows 服务。
    • 同意。在这种情况下,自定义安装程序将是理想的选择。
    • @Jayrooi,它不是桌面应用,而是 Windows 应用商店应用