【问题标题】:Getting user information on Windows 8.1 app running on Windows 10获取有关在 Windows 10 上运行的 Windows 8.1 应用程序的用户信息
【发布时间】:2016-02-18 20:36:46
【问题描述】:

我有一个用作 LOB 应用程序的 Windows 8.1 应用程序。

应用程序使用以下代码行获取域用户:

string user = await Windows.System.UserProfile.UserInformation.GetDomainNameAsync();

这一切都很好,该应用程序部署在众多 8.1 平板电脑上。

但是,我刚刚将我的 PC 升级到 Windows 10,并且该行代码现在返回一个空字符串。

我在谷歌上找到了这篇文章:https://msdn.microsoft.com/library/windows/apps/windows.system.userprofile.userinformation.aspx

但建议只是将应用升级到 Windows 10 通用应用或回滚到 Windows 8.1。这不是一个很好的选择,因为我到处都有运行 8.1 的平板电脑。

那么有人知道如何解决这个问题吗?这基本上意味着我无法在我的 Windows 10 PC 上开发 Windows 8 应用程序。

【问题讨论】:

    标签: windows-store-apps winrt-xaml windows-10-universal


    【解决方案1】:

    Windows 10 中不再存在 UserInformation 类。

    查看此链接: https://msdn.microsoft.com/library/windows/apps/windows.system.userprofile.userinformation.aspx

    如果你向下滚动注释你会发现 UserInformation 类被User 类取代:

    Windows 10:

    为 Windows 8 编译的应用程序使用 UserInformation 类 no 在 Windows 10 上运行时不再返回用户信息。这是 因为在 Windows 10 中,应用程序无权访问用户信息 未经用户明确同意,这与 Windows 8 中的不同 默认授予权限。

    如果您有一个使用 UserInformation 类的 Windows 8 应用程序,您 应将您的应用迁移到通用 Windows 平台 (UWP) 和 而是访问 User 类。通用 Windows 平台 (UWP) 应用 现在预计访问用户信息将声明一个新的 能力,uap:userAccountInformation,并调用新的 API, Windows.System.User.FindAllAsync 和 User.GetPropertiesAsync,获取 数据。

    系统会提示安装该应用的用户允许其用户访问 信息。如果用户允许应用访问信息,则 应用程序出现在 Windows 10 设置 UI 的隐私页面中 (设置 > 隐私 > 帐户信息)。这允许 Windows 10 用户 允许基于每个应用访问用户信息。

    所以简短的回答是否定的,如果不更改您的代码是不可能的。

    您可以做的是检查操作系统运行时并实现两种获取用户信息的方法。 1 用于 Windows 8 和 1 用于 Windows 1(通过这样做,您还可以在 Windows 10 设备上使用您的应用)

    How can I detect if my app is running on Windows 10

    If app is running Windows 10: use User class
    Else: use UserInformation class.
    

    要在您的 Windows 10 设备上测试它在 Windows 8 上的运行情况,您可以添加一个 Windows 8 虚拟机并在其中测试应用程序。 (不完美,但至少它是一些东西)

    【讨论】:

    • 链接在我的问题中
    • 但是链接会给你答案。该代码仍然可以编译,但不能在 Windows 10 上运行,并且不会返回任何内容而不是用户信息。在 Windows 8.1 上,代码仍将返回正确的用户信息。没有其他办法。
    • 所以如果你的问题是有没有其他解决方法,答案是:没有
    • 是的,我知道链接给了我答案。我在问,希望那里的聪明人已经创建了一个解决方案来解决这个问题。我从微软那里发现这很糟糕,答案就是升级应用程序。这意味着我不能使用 1 台 PC 同时开发 Win 8 和 Win 10 应用程序。对我来说似乎很愚蠢!
    • 好的更新了我的答案。您可能想在代码中为该特定语句添加版本检查,并以不同的方式检索 Windows 10 的用户信息。 (请参阅答案中的链接)。
    最近更新 更多