【问题标题】:Is there a way to launch external .exe files and UWP apps from within my UWP app?有没有办法从我的 UWP 应用程序中启动外部 .exe 文件和 UWP 应用程序?
【发布时间】:2021-03-30 08:44:42
【问题描述】:

基本上,我想让用户能够将安装在他们 PC 上的其他应用的快捷方式添加到我的应用中,以便他们可以从我的应用中启动它们。我希望他们能够启动 Win32 应用程序和 UWP 应用程序(Windows 10 商店应用程序)。我的应用程序不是文件浏览器,但用户只需能够从我的应用程序中启动他们最喜欢的应用程序。我有理由希望实现这种类型的功能。 -__-

【问题讨论】:

  • 一种将应用程序注册到另一个应用程序的 URI 方案的方法。请参阅:stackoverflow.com/questions/32694642/… 并使用启动器调用 uri:docs.microsoft.com/en-us/uwp/api/… 这不是 windows 标准的方式,因为您应该只为自己的应用程序添加 uri,但我认为它会起作用。
  • 感谢您的回复。目标是执行外部应用程序,而不是位于我的应用程序包中的应用程序。此外,这些应用程序的链接将在运行时设置,因此不会对链接进行硬编码。您基本上是在为用户提供单击按钮并将文件系统浏览到某个任意可执行文件的位置的选项。从那时起,即使在我的应用重新启动后,用户也可以在我的应用中随意启动应用。
  • 使用进程类启动应用程序,这与从文件资源管理器启动相同。您可能需要启动包含启动信息的快捷方式。
  • 有 UWP Process 类吗?你可以说得更详细点吗?感谢您的回复。

标签: c# xaml uwp uwp-xaml


【解决方案1】:

我的 UWP 应用中是否有 UWP 应用的方法?

UWP 提供了一种查询当前用户已安装的 UWP 应用的方法。你可以使用FindPackagesForUser 来获取它们。然后调用GetAppListEntriesAsync 获取每个应用的应用入口。如果你想启动应用程序,只需调用LaunchAsync 方法。更多内容请参考以下示例代码。

private async void FindBtn_Click(object sender, RoutedEventArgs e)
{
    PackageManager manager = new PackageManager();
    var packages = manager.FindPackagesForUser(string.Empty);
    foreach (var package in packages)
    {

        var appEntries = await package.GetAppListEntriesAsync();
        var firstApp = appEntries.FirstOrDefault();
        if (firstApp != null)
        {
            await firstApp?.LaunchAsync();
        }

    }
}

请注意 `` 调用FindPackagesForUser之前,需要开启packageQuery能力

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

......

 <rescap:Capability Name="packageQuery" />

有没有办法启动外部 .exe 文件

目前,UWP 还没有提供这样的 api 来像经典桌面应用一样直接启动带有路径的 win32 应用,如果你确实想要这个功能,我们建议你为你的 UWP 应用制作桌面扩展,并在扩展中安装应用并启动它部分。

【讨论】:

  • 谢谢!最后一个明确的回应让我有所收获。
猜你喜欢
  • 2016-10-15
  • 2019-10-13
  • 1970-01-01
  • 2019-03-22
  • 2018-04-03
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多