我的任务是将一个LOB桌面应用程序从.NET 4.5.2移植到Windows 10 UWP。在正常的Win32应用程序中,应用程序会运行,直到用户关闭应用程序(服务和应用程序)。但在阅读UWP应用程序时,我发现所有文档都说没有办法阻止应用程序暂停(只是临时或超过配额)。我在移动设备/平板电脑上理解这一点,但在具有性能和功率的台式机上却不了解。
此问题的常见答案是使用“真实”服务器(通常是Web服务器)。但我们的应用程序用于没有互联网的领域。所以我们需要服务器/服务在台式机上运行。
到目前为止,我找到的最佳选择是一个UWP应用程序,内置后台任务要求延期。但据我所知,这仍然无法保证暂停。只有一些模糊的信息“你可能不会被暂停,因为它是一台在全球池中拥有大量资源的台式机”......
我不喜欢将.NET中的LOB服务应用程序和UWP中的客户端保留在一起,因为它们共享许多无法在.NET和UWP之间重用的代码。
那么,任何有明确答案/参考的人都可以阻止在Win10台式机上运行的服务式UWP应用/任务暂停?
答案 0 :(得分:5)
在wpdev.uservoice.com上提出了类似的uservoice,其中微软正在倾听建议。我们强烈建议您对其进行投票,添加您的评论并对其进行监控。
我认为防止暂停与否应该由用户决定,但是没有办法做到这一点。我同意,在某些特殊情况下,它是有道理的。
但目前UWP的应用程序生命周期对于暂停状态非常清楚。在桌面系列上,UWP应用程序在最小化或Windows进入低功耗状态时暂停。
[<强>更新强>
您可能不知道的另一种可能的解决方案是Windows 10中引入的新功能 - Extended execution session。
目前没有关于此功能的官方示例,但您可以查看有关应用程序生命周期的Jerry Nixon and Andy Wigley’s MVA session(#13)。 here是该会话的Q&amp; A记录,您可以在其中找到示例代码。您可以下载MVA会话中包含的ppt,其中包含以下代码供您快速参考:
private async void OnSuspending(object sender, SuspendingEventArgs args)
{
var deferral = e.SuspendingOperation.GetDeferral(); using (var session = new ExtendedExecutionSession { Reason = ExtendedExecutionReason.SavingData })
{
session.Description = "Upload Data";
session.Revoked += (s, e) => { Log("Save incomplete"); }; try
{
if (await session.RequestExtensionAsync() == ExtendedExecutionResult.Denied) // takes 3 seconds
UploadBasicData();
else // takes 8 seconds
await UploadDataAsync(session); Log("Save complete");
}
catch { Log("Save failed"); }
finally { deferral.Complete(); }
}
}
但正如杰瑞所说,仍然无保证它100%可靠。
答案 1 :(得分:2)
更新:已为LOB应用创建了特定于企业的功能,只要需要这些功能,以下是有关这些功能的信息:https://docs.microsoft.com/en-us/windows/uwp/launch-resume/run-in-the-background-indefinetly
Clint的UserVoice中的答案适用于所有针对消费者Microsoft Store的应用程序:
在Windows 10周年更新(Build 14393)中,我们更新了扩展执行未指定原因,以便为PC设备系列提供电池感知功能。在前台请求它,如果设备连接到交流电源或者如果它有电池但是用户在电池使用设置中设置了“始终允许”,则该应用程序将能够在没有时间限制的情况下运行。 这适用于单个流程模型,因为扩展执行不适用于后台任务。 对于某些情况,BackgroundMediaPlayback功能也不会被暂停。 我们保持开放,因为我们可以做更多事情。如果您有方案,我们无法使用更新的模型,请告诉我们!
因此前台应用程序可以使用扩展执行来防止暂停使用电池设置,扩展执行位置跟踪或BackgroundMediaPlayback功能,具体取决于您需要的方案。从您的描述中可以看出,未指定的扩展执行选项将是最相关的选项。以下是示例代码的链接:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/ExtendedExecution
答案 2 :(得分:0)
我认为你最好的选择是App Services,这是Windows 10的新功能。从Microsoft MVA:http://www.microsoftvirtualacademy.com/training-courses/a-developers-guide-to-windows-10,请注意:此链接有点过时,但信息仍然有效。您可能想要查找相同内容的更新版本。
基本上,App服务就像Web服务,可以被其他应用程序使用。注意其生命周期。在我看来,它的生命周期类似于Windows服务,但仔细检查。