等待启动的应用程序停止

Wait for an launched application to stop

我们目前正在 UWP 中进行一个项目,我们必须启动一个外部应用程序来修改一些文档。

我们调查了 Windows.System.Launcher API 但似乎我们需要的比它所能提供的更多。

当我们从文件启动应用程序时,我们使用 LaunchFileAsync 方法,基于 example given by the MSDN :

async void DefaultLaunch()
{
   // Path to the file in the app package to launch
   string imageFile = @"images\test.png";

   var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile);

   if (file != null)
   {
      // Launch the retrieved file
      var success = await Windows.System.Launcher.LaunchFileAsync(file);

      if (success)
      {
         // File launched
      }
      else
      {
         // File launch failed
      }
   }
   else
   {
      // Could not find file
   }
}

到目前为止,该示例很适合我们,但我们还需要在用户完成文件操作时收到警告。最好能给launcher一个回调方法。

我们尚未在文档中找到类似的内容。这可能吗?我们需要使用其他解决方案吗?

TL;DR:是否有从 UWP 应用程序打开另一个应用程序并等待它 return 结果对象的解决方案?

应用进程隔离模型意味着您无法从 UWP 应用执行此操作。因为您只想知道任意程序何时完成,您可以用传统的 .net/win32 编写并通过 desktop bridge.

将其包含在您的 UWP 应用程序中

如果外部应用也是 UWP 应用,那么 Launcher.LaunchUriForResultsAsync 就是为此而设计的。它将启动目标应用,然后等待该应用返回结果。

有关其工作原理的完整演练,请参阅 Launch an app for results

如果目标应用不是 UWP 应用,那么您可以自己实现同样的事情:两个应用都声明一个协议。客户端使用服务器的协议启动服务器。当服务器完成后,它会通过启动客户端协议来通知调用者。

您可能还想查看 App Services,它允许 UWP 服务器应用向本地系统上的客户端公开 REST-like 服务。