如何使用通用Windows平台(UWP)应用程序执行进程命令(或类似命令)

本文关键字:命令 执行 进程 应用程序 UWP 何使用 Windows 平台 | 更新日期: 2023-09-27 18:24:29

我正在创建自定义Cortana命令。这些命令是使用通用Windows平台应用程序注册和执行的。(GitHub)

例如,我注册了以下命令

<Command Name="ShutDown">      
  <ListenFor>Shut down</ListenFor>
  <Navigate/>    
</Command>

在UWP应用中运行此功能

static async void ShutDown()
{
    var dialog = new MessageDialog("This is where I would shut the computer down.");
    await dialog.ShowAsync();
    //System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
}

但在设置后,我了解到System.Diagnostics.Process在UWP中不受支持。

我想要运行的自定义命令涉及某种执行,例如启动外部程序、运行其他脚本或打开网站。

UWP不支持它们是有道理的,因为它是通用的,XBox或手机可能无法做到这一点,但我希望有一些替代或破解的方法可以在Windows 10 PC上实现这一点。

有没有一种方法可以让我在UWP应用程序中执行Process命令或其他具有类似功能的命令?似乎即使我可以让Cortana执行我的C#代码,UWP也不支持在这种情况下有用的东西。

提前谢谢。

如何使用通用Windows平台(UWP)应用程序执行进程命令(或类似命令)

实现类似行为的方法是有限的。

  1. 您可以使用LaunchUri来触发为某个URI方案注册的其他应用程序。这应该适用于您的网络浏览器场景。更多详细信息请点击此处:https://msdn.microsoft.com/en-us/library/windows/apps/windows.system.launcher.launchuriasync.aspx

  2. 您可以触发另一个应用程序,并使用LaunchForResults从中获取结果。被调用的应用程序必须支持此功能。更多详细信息请点击此处:https://msdn.microsoft.com/en-us/library/windows/apps/mt269386.aspx

  3. 您可以触发其他应用程序提供的应用程序服务。被调用的应用程序必须支持此功能。应用程序服务将在后台执行。(我觉得这很酷。)更多详细信息请点击此处:http://blogs.msdn.com/b/mvpawardprogram/archive/2015/06/11/writing-windows-10-app-services-in-javascript.aspx

  4. 这有点棘手:我不确定这是否仍然有效,但它确实适用于Windows 8.1:你可以创建一个所谓的"代理组件"。这允许你在机器上触发应用程序中的所有内容,但你将无法将代理组件发布到商店中。这也允许在Windows 8.1上使用Process.Start()。它只适用于侧加载的应用程序。我不确定它是否仍然适用于Windows 10。更多信息请点击此处:https://msdn.microsoft.com/en-us/library/windows/apps/dn630195.aspx

摘要:只要目标应用程序注册为应用程序服务或注册了协议处理程序(Uri方案),启动另一个应用程序就非常容易。如果选项4不再有效,则无法启动脚本或其他*.exe。

使用Windows 10周年更新(1607),可以在PC上启用此场景。使用桌面扩展SDK中的此API,您可以启动以完全用户权限运行的完全信任进程:

https://learn.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher

通过这种方式,您可以在支持它的平台上点亮它,即运行1607或更高版本的PC。你的应用程序仍然是通用的:

if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
{
    await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
}