首页 文章

C#uwp启动应用程序

提问于
浏览
1

使用以下代码:

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打开已安装的应用?或者,如果有另一种方法来检查App是否已安装,如果是,则启动它,如果不是,则将其显示在商店中,以便用户可以手动安装它 . 我正在开发的应用程序是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"));

它正在商店中显示应用程序 .

感谢名单 .

3 回答

  • 1

    如果要从另一个应用程序启动一个应用程序,目标应用程序必须具有已注册的URI激活并处理该情况 . 更多关于你可以阅读at MSDN .

    商店中有很多应用已经注册了URI方案,互联网上有一些列表,但是我实际上和哪些应用程序可以使用UWP .

  • 1

    或者,如果有另一种方法来检查App是否已安装,如果是,则启动它,如果不是,则将其显示在商店中,以便用户可以手动安装 .

    您可以调用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"));
    }
    
  • 0

    可以使用包管理器:

    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

相关问题