在没有 Visual Studio 的情况下暂停恢复 UWP 应用程序的应用程序或代码

App or Code to Suspend Resume UWP app without Visual Studio

我的问题与 类似,但我需要一个可以提供给我的 QA 团队的应用程序,以便他们可以更轻松地在我的应用程序中调用暂停和恢复。

由于 Visual Studio 有一个 "LifeCycle Events" 工具栏,可以让您暂停和恢复您的应用程序,我认为 Visual Studio 必须有一个应用程序可以执行此操作。但是,仔细阅读 Visual Studio 文件,我找不到这样的可执行文件。

有谁知道可以暂停或恢复 windows 商店应用程序的独立应用程序(是否安装 Visual Studio)?

如果没有,有人有可以暂停或恢复任意 UWP 应用程序的示例代码吗?我知道有一些用于构建调试器的 C++ 库,但我不是 C++ 程序员。如果有 C# 方法可以做到这一点,请 post 一些代码。如果它必须是 C++ 应用程序,请post一个易于构建的完整示例。

一种可能性是让测试人员简单地最小化和最大化应用程序。这将触发暂停和恢复。

要检查应用程序是否真的暂停和恢复,可以使用日志记录,例如MetroLog 或任何其他日志记录解决方案。

要进行快速测试,可以这样做:

MetroLog

在程序包管理器控制台中输入:

Install-Package MetroLog 

代码

在 App 构造函数中添加如下内容:

LogManagerFactory.DefaultConfiguration.AddTarget(LogLevel.Trace, LogLevel.Fatal, new StreamingFileTarget());
log = LogManagerFactory.DefaultLogManager.GetLogger<App>();

this.Suspending += OnSuspending;
this.Resuming += OnResuming;

那么有这两种方法:

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    log.Trace("OnSuspending called");
    deferral.Complete();
}

private void OnResuming(object sender, object e)
{
    log.Trace("OnResuming called");
}

测试

  • 部署应用程序
  • 退出VS
  • 从 Windows 菜单调用应用程序
  • 最小化和最大化应用程序

在文件夹 ApplicationData.Current.LocalFolder 中,您将找到一个新文件夹 MetroLogs,其中包含一个名为 Log - 20181216.log.

的文件

在文本编辑器中打开它:

如您所见,应用程序已暂停并恢复。

这就是你要找的吗?

UWP 提供了用于挂起和恢复应用程序的专用 API: StartSuspendAsync StartResumeAsync

例如,您可以如何暂停 FeedbackHub 应用程序:

var diag = await AppDiagnosticInfo.RequestInfoForPackageAsync("Microsoft.WindowsFeedbackHub_8wekyb3d8bbwe");
if (diag.Count > 0)
{
    var resourceGroups = diag[0].GetResourceGroups();
    if (resourceGroups.Count > 0)
    {
        await resourceGroups[0].StartSuspendAsync();
    }
}

请注意,您需要声明 'appDiagnostics' 调用这些 API 的能力:

<Package
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
  ...

  <Capabilities>
    <rescap:Capability Name="appDiagnostics" />
  </Capabilities>
</Package>