获取应用和加载项的许可证信息

本文介绍了如何使用 Windows.Services.Store 命名空间中 StoreContext 类的方法,来获取当前应用及其加载项的许可证信息。 例如,你可以使用此信息来确定应用或其加载项的许可证是否处于活动状态,或确定它们是否是试用许可证。

注意

Windows.Services.Store 命名空间在 Windows 10 版本 1607 中引入,它仅可用于面向 Windows 10 周年纪念版(10.0;版本 14393)或 Visual Studio 更高版本的项目中。 如果你的应用面向 Windows 10 的较早版本,则必须使用 Windows.ApplicationModel.Store 命名空间来替代 Windows.Services.Store 命名空间。 有关详细信息,请参阅此文章

先决条件

本示例有以下先决条件:

  • 适用于面向 Windows 10 周年纪念版(10.0;版本 14393)或更高版本的通用 Windows 平台 (UWP) 应用的 Visual Studio 项目。
  • 你已在合作伙伴中心中创建应用提交,并且此应用已在应用商店中发布。 在测试应用期间,你可以选择将应用配置为在 Microsoft Store 中隐藏。 有关详细信息,请参阅我们的测试指南
  • 如果你想要获取应用的某个加载项的许可证信息,还必须在合作伙伴中心中创建加载项

此示例中的代码假设:

  • 代码在含有 ProgressRing(名为 )和 TextBlock(名为 textBlock)的workingProgressRing页面的上下文中运行。 这些对象分别用于指示是否正在进行异步操作和显示输出消息。
  • 代码文件有一个适用于 Windows.Services.Store 命名空间的 using 语句。
  • 该应用是单用户应用,仅在启动该应用的用户上下文中运行。 有关详细信息,请参阅应用内购买和试用

注意

如果你有使用桌面桥的桌面应用程序,可能需要添加不在此示例中显示的额外代码来配置 StoreContext 对象。 有关更多信息,请参阅在使用桌面桥的桌面应用程序中使用 StoreContext 类

代码示例

若要获取当前应用的许可证信息,请使用 GetAppLicenseAsync 方法。 这是一种异步方法,它返回提供应用的许可证信息的 StoreAppLicense 对象,其中包括指示用户当前是否具有使用应用的有效许可证的属性 (IsActive) 和指示许可证是否用于试用版的属性 (IsTrial)。

若要访问用户有权使用的当前应用的持久性加载项的许可证,请使用 StoreAppLicense 对象的 AddOnLicenses 属性。 此属性返回 StoreLicense 对象集合,表示加载项许可证。

private StoreContext context = null;

public async void GetLicenseInfo()
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    StoreAppLicense appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    if (appLicense == null)
    {
        textBlock.Text = "An error occurred while retrieving the license.";
        return;
    }

    // Use members of the appLicense object to access license info...

    // Access the valid licenses for durable add-ons for this app.
    foreach (KeyValuePair<string, StoreLicense> item in appLicense.AddOnLicenses)
    {
        StoreLicense addOnLicense = item.Value;
        // Use members of the addOnLicense object to access license info
        // for the add-on.
    }
}

有关完整的应用程序示例,请参阅 Microsoft Store 示例