【问题标题】:C# uwp launch appsC# uwp 启动应用程序
【发布时间】:2017-06-18 03:52:56
【问题描述】:

下面的代码:

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 应用商店的 LAUNCH 按钮获得链接吗?所以,我会把它放在 URI 中,就像来自 GET 按钮的链接:

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"));

它正在商店中展示应用程序。

谢谢。

【问题讨论】:

    标签: c# windows-store-apps uwp launching-application


    【解决方案1】:

    可以使用包管理器:

    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://docs.microsoft.com/en-us/windows/uwp/packaging/app-capability-declarations#restricted-capabilities

    【讨论】:

      【解决方案2】:

      如果您想从另一个应用程序启动一个应用程序,则目标应用程序必须已注册 URI 激活并处理这种情况。更多相关信息您可以阅读at MSDN

      商店中的许多应用程序都注册了 URI 方案,互联网上有一些列表,like this one,但我不确定它是否真实以及哪些应用程序可以与 UWP 一起使用。

      【讨论】:

        【解决方案3】:

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

        您可以致电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打开它...
        • 在UWP中,如果你想启动应用程序,你需要知道它的url(协议),你会看到所有注册的协议Go to Control Panel\All Control Panel Items\Default Programs and select Associate a file type or protocol with a specific program.Scroll to the Protocols section如果你找不到某个应用程序的协议,恐怕你不能启动它。在桌面上,你可以创建一个单独的应用程序,支持使用 COM 来启动它。见这个:launcher-application
        • 商店如何启动应用程序?
        • @user3239349 我想它应该使用commandline 来启动应用程序。你只需要知道包名。
        猜你喜欢
        • 1970-01-01
        • 2018-04-03
        • 1970-01-01
        • 2016-10-15
        • 2017-09-18
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 2020-07-24
        相关资源
        最近更新 更多