C# UWP启动应用程序

5
以下是翻译的结果:

使用以下代码:

await Windows.System.Launcher.LaunchUriAsync(new Uri(@"ms-windows-store://review/?ProductId=9wzdncrfj2wl"));

我正在Microsoft Store中打开Facebook应用程序。页面上有一个“启动”按钮。用户可以使用它来运行应用程序。

如何使用其产品ID运行应用程序?

我使用以下代码成功打开了应用程序:

await Windows.System.Launcher.LaunchUriAsync(new Uri("fb:post?text=foo"));

但我想使用ID打开它。

我找到了这段代码,但它不起作用:

await Windows.System.Launcher.LaunchUriAsync(new Uri(@"ms-windows-store://pdp/?ProductId=9wzdncrfj2wl"));

如何使用ID打开已安装的应用程序?或者,如果有其他方法可以检查应用程序是否已安装,如果是,则启动它,如果不是,则在商店中显示它,以便用户可以手动安装。我正在开发的应用程序是Windows 10 UWP...
我遇到了这样一种情况,即没有应用程序的URI,因此必须通过其ProductID或ProductFamily打开它...
因此,这是打开该应用程序的快捷方式目标: C:\ Windows \ explorer.exe shell:AppsFolder \ A88BB54F.N1info_gvc78jvcn5cg0!App 有没有可能在UWP应用程序中使用它来启动应用程序?
有人从Windows Store的“启动”按钮获得了链接吗?因此,我会将其放在URI中,就像从“获取”按钮获得的链接一样:
ms-windows-store:PDP?PFN=A88BB54F.N1info_gvc78jvcn5cg0&referrer=unistoreweb&webig=39694073-f9af-436f-a82b-abb9d9f644f0&muid=097C7AA3CA2C6EE22D237359CE2C689A&websession=c9916902dd014ec2b5a9e0390a28c26d

我是这样使用它的:
await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-windows-store:PDP?PFN=A88BB54F.N1info_gvc78jvcn5cg0&referrer=unistoreweb&webig=39694073-f9af-436f-a82b-abb9d9f644f0&muid=097C7AA3CA2C6EE22D237359CE2C689A&websession=c9916902dd014ec2b5a9e0390a28c26d"));

并且它正在应用商店中显示。

谢谢。

3个回答

3

可以通过使用包管理器实现:

using Windows.Management.Deployment;

var app = await GetAppByPackageFamilyNameAsync("Microsoft.WindowsCalculator_8wekyb3d8bbwe");

if(app != null)
{
  await app.LaunchAsync();
}    

static async Task<AppListEntry> GetAppByPackageFamilyNameAsync(string packageFamilyName)
{
    var pkgManager = new PackageManager();
    var pkg = pkgManager.FindPackagesForUser("", packageFamilyName).FirstOrDefault();

    if (pkg == null) return null;

    var apps = await pkg.GetAppListEntriesAsync();
    var firstApp = apps.FirstOrDefault();
    return firstApp;
}

并在Package.appxmanifest中添加一项功能:

<?xml version="1.0" encoding="utf-8"?>    
<Package xmlns:...
         xmlns:rescap = "http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" 
         IgnorableNamespaces="... rescap">
  ...
  <Capabilities>
    ...
    <rescap:Capability Name="packageQuery" />
  </Capabilities>
</Package>

了解更多有关受限功能的信息:https://learn.microsoft.com/zh-cn/windows/uwp/packaging/app-capability-declarations#restricted-capabilities


1
如果您想从另一个应用程序启动一个应用程序,则目标应用程序必须已注册URI激活并处理该情况。更多信息可以阅读MSDN
商店中有很多应用程序已经注册了URI方案,在互联网上有一些列表,比如这个,但我不确定它是否最新且哪些应用程序适用于UWP。

1

或者,如果有其他方法可以检查应用程序是否已安装,如果是,则启动它,如果不是,则在商店中显示它,以便用户可以手动安装它。

您可以调用Launcher.QueryUriSupportAsync来查看应用程序是否已安装。此方法将返回LaunchQuerySupportStatus enumeration值,您可以根据此值决定打开应用程序或Windows商店。

请查看以下代码以了解详情:

var ret = await Windows.System.Launcher.QueryUriSupportAsync(new Uri("fb:post?text=foo"), Windows.System.LaunchQuerySupportType.Uri);
if (ret == LaunchQuerySupportStatus.Available)
{
    await Windows.System.Launcher.LaunchUriAsync(new Uri("fb:post?text=foo"));
}
else
{
    await Windows.System.Launcher.LaunchUriAsync(new Uri(@"ms-windows-store://pdp/?ProductId=9wzdncrfj2wl"));
}

我遇到了一个没有应用程序URI的情况,所以我必须通过它的ProductID或ProductFamily来打开它... - user3239349
在UWP中,如果您想要启动应用程序,您需要知道其URL(协议),您将看到所有已注册的协议转到控制面板\所有控制面板项\默认程序并选择将文件类型或协议与特定程序关联。滚动到协议部分如果您找不到某个应用程序的协议,恐怕您无法启动它。在桌面上,您可以创建一个支持使用COM进行启动的单独应用程序。请参见此处:launcher-application - user7344528
Store如何启动应用程序? - user3239349
@user3239349 我猜应该使用命令行来启动应用程序。你只需要知道包名即可。 - user7344528
@user3239349 请查看https://msdn.microsoft.com/zh-cn/windows/uwp/xbox-apps/automate-launching-uwp-apps#launch-activation。 - user7344528

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接