我们目前正在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
}
}
到目前为止,该示例非常适合我们,但我们还需要在用户完成文件时收到警告。最好的方法是能够为启动器提供一个回调方法。
我们在文档中还没有找到类似的东西。这甚至可能吗?我们需要使用其他解决方案吗?
TL; DR:是否有解决方案从UWP应用程序打开另一个应用程序并等待它返回结果对象?
答案 0 :(得分:2)
如果外部应用也是UWP应用,那么Launcher.LaunchUriForResultsAsync就是为此设计的。它将启动目标应用程序,然后等待应用程序回调结果。
请参阅Launch an app for results,详细了解其工作原理。
如果目标应用程序不是UWP应用程序,那么您可以自己实现相同的功能:两个应用程序都声明了协议。客户端使用服务器协议启动服务器。服务器完成后,它会通过启动客户端的协议来通知呼叫者。
您可能还想查看App Services,它允许UWP服务器应用程序向本地系统上的客户端公开类似REST的服务。
答案 1 :(得分:1)
应用程序进程隔离模型意味着您无法从UWP应用程序执行此操作。您只想知道任意程序何时完成,您可以使用传统的.net / win32编写它,并通过desktop bridge将其包含在您的UWP应用程序中。