我已使用 WindowsRuntimeComponent 在 UWP 中创建了后台任务。并使用计时器在 UWP 应用程序“OnNavigateTo”事件中注册BackgroundTask。 它运行良好。我的问题是,这是注册BackgroundTask 的唯一方法还是我们可以像Windows 服务一样托管它?这样它就可以在机器启动时自动运行我们的UWP应用程序启动。
任何人都可以帮助实现这一目标吗?
最佳答案
so that it can run Automatically when machine start with out UWP App start.
有两种方法可以实现后台任务:进程内和进程外。 Windows 10 版本 1607 中引入了进程内后台支持,以简化编写后台任务。
对于单进程后台任务,它的生命周期受到应用程序生命周期的影响,正如您所关心的,重新启动机器后,您需要启动uwp应用程序来运行任务。更多详情请见Create and register a single process background task 。 但对于多进程后台任务,一旦您使用时间触发器注册了后台任务,它就会一直运行,直到您取消注册为止。重启机器后,任务将自动开始,无需启动应用程序。更多详情请见Create and register a background task that runs in a separate process 。
当您为后台任务TaskEntryPoint
创建Windows运行时组件
时,我认为您创建的后台任务是单独的进程。所以你可以测试一下,看看后台任务是否可以在机器重新启动后运行而无需启动应用程序(注意你没有设置任何可能阻止任务的条件)。例如,我编写了一个带有时间触发器的单独进程后台任务,每 15 分钟将当前时间写入一个文本文件。当我关闭机器并在第二天启动它后,它将继续将数据写入文件而无需启动应用程序。这是我的部分结果:
10/10/2016 5:47:25 PM second activity10/10/2016 6:02:25 PM first activity
10/10/2016 6:02:25 PM second activity10/11/2016 9:04:19 AM first activity
10/11/2016 9:04:19 AM second activity10/11/2016 9:27:44 AM first activity
10/11/2016 9:27:44 AM second activity10/11/2016 9:42:44 AM first activity
更多后台任务详情请引用Guidelines for background tasks和 official sample .
Is this the only way to register BackgroundTask or can we host this as like Windows service?
Windows服务有很多特点,比如没有UI,只要Windows运行就运行。对于这些,听起来应用程序服务具有类似的特征。应用服务作为后台任务实现。这使得前台应用程序可以调用另一个应用程序中的应用服务来执行后台任务。在计算机上部署应用程序服务提供程序后,您可以随时从客户端应用程序调用后台任务,而无需启动服务提供程序应用程序。但是这个后台任务将与您的前台客户端应用程序具有相同的生命周期,这意味着如果您不启动客户端应用程序,则无法连接应用程序服务。更多详情请引用Create and consume an app service .
总的来说,单独进程中的后台任务就可以满足您的要求。
关于uwp - 我们可以将 UWP BackgroundTask(WindowsRuntimeComponent) 作为 Windows 服务托管吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39910659/