C# 检测Windows应用商店是否可用

C# 检测Windows应用商店是否可用,c#,windows-store,C#,Windows Store,我的目标是建议用户从桌面应用程序安装应用程序的商店版本,但我需要知道用户是否可以这样做(例如,其Windows 10+,商店可用) 我可以很容易地检测到Windows 10+ 问题是有许多SKU,如Windows Server和Windows LTSB,它们没有存储,但提供基本相同的API 到目前为止,我所尝试的: 尝试创建Windows.Management.Deployment.PackageManager的实例 功能 前者在Windows Server上取得了成功,尽管缺少存储 后者虽

我的目标是建议用户从桌面应用程序安装应用程序的商店版本,但我需要知道用户是否可以这样做(例如,其Windows 10+,商店可用)

我可以很容易地检测到Windows 10+

问题是有许多SKU,如Windows Server和Windows LTSB,它们没有存储,但提供基本相同的API

到目前为止,我所尝试的:

  • 尝试
    创建
    Windows.Management.Deployment.PackageManager的实例
  • 功能
前者在Windows Server上取得了成功,尽管缺少存储

后者虽然目前已经足够,但需要手动检查所有非存储SKU,并不能真正解决问题,因为没有任何东西阻止Microsoft将Windows Store引入Windows 2019 LTSB

实际上,更具体地说,我想知道当前用户是否可以从Windows应用商店安装桌面网桥应用。

您可以使用PowerShell命令检查是否安装了Microsoft.StorePurchaseApp软件包

首先,使用package Manager控制台安装NuGet软件包:

然后使用如下方法:

public static bool IsStoreAvailable()
{
    using (var shell = PowerShell.Create())
    {
        shell.AddScript("Get-AppxPackage -Name Microsoft.StorePurchaseApp");
        var result = shell.Invoke();
        return result.Any();
    }
}

这就是我得到的结果:
Package-storePackage=packageManager.findpackagesfourser(userSecurityId:string.Empty,packageFamilyName:“Microsoft.StorePurchaseApp_8wekyb3d8bbwe”).FirstOrDefault();返回存储包!=无效很好,你已经开始工作了,但是,我不喜欢packageFamilyName中的随机部分。。。它很可能会崩溃。这不是随机的——它是Microsoft发布者ID。如果发布者要更改,PFN也必须更改,因此这里没有额外的脆弱性。
public static bool IsStoreAvailable()
{
    using (var shell = PowerShell.Create())
    {
        shell.AddScript("Get-AppxPackage -Name Microsoft.StorePurchaseApp");
        var result = shell.Invoke();
        return result.Any();
    }
}