通用 Windows 应用程序运行时组件未在使用 Visual Studio 2015 的 Windows 10 上生成 UserIdentity

Posted

技术标签:

【中文标题】通用 Windows 应用程序运行时组件未在使用 Visual Studio 2015 的 Windows 10 上生成 UserIdentity【英文标题】:Universal Windows Application Runtime component not resulting UserIdentity on Windows 10 using Visual Studio 2015 【发布时间】:2017-05-01 19:14:12 【问题描述】:

我正在将 Windows 10 机器和 Visual Studio 2015 用于具有 Windows 运行时组件和通用 Windows 应用程序 (UWA) 的项目。 UWA 参考了 Windows 运行时组件,该组件执行任务以获取登录用户的 UserIdentity(Window NT ID 即“域名/用户名”)。创建 UWA 测试项目以调试运行时组件。如果我们在运行时组件中获取 UserIdentity,那么我们可以使用对我们的 Windows10 cordova 项目的组件引用来获取 javascript 中的 UserIdentity。 在这里,我们面临的问题是没有任何代码可以登录用户的域名/用户名。我们已将此代码从 Windows 8.1 升级到 10,此代码在 Windows 8.1 上运行良好,但在 Windows 10 中出现问题。以下是我们用于获取 UserIdentity 的代码:

public sealed class getNTID

    public static IAsyncOperation<string> DownloadAsStringsAsync()
    

        return Task.Run<string>(async () =>
        

            IReadOnlyList<User> users = await User.FindAllAsync();

            var current = users.Where(p => p.AuthenticationStatus == UserAuthenticationStatus.LocallyAuthenticated &&
                                    p.Type == UserType.LocalUser).FirstOrDefault();


            var data = await current.GetPropertyAsync(KnownUserProperties.AccountName);

            return data.ToString();

        ).AsAsyncOperation();
    
 

最后我们在数据变量中得到空字符串。如果有人分享他们的经验或者他们在提到的平台上遇到过这种问题,那就太好了。

【问题讨论】:

【参考方案1】:

User 类是 windows 10 的新类,与您使用的 windows 8.1 中的 UserInformation 不同。访问用户的个人信息是您必须请求的权限,因此在您的商店应用的 Package.appxmanifest 中,您需要在 Capabilities 选项卡中启用 User Account Information 功能。

当您拨打GetPropertyAsync时,您的用户会从系统收到如下的权限提示,接受即可获得权限。有关功能的更多详细信息,请参考this document。

对于GetPropertyAsync 方法,如果属性缺失或不可用,则返回一个空字符串。因此,如果您已经完成但仍然得到 null 值,则可能是该属性丢失或不可用。

这是我通过运行您的代码来获取当前用户的DomainName 得到的结果(我也将代码放在了 windows 运行时组件中)。

更多详情请参考official sample。

【讨论】:

以上是关于通用 Windows 应用程序运行时组件未在使用 Visual Studio 2015 的 Windows 10 上生成 UserIdentity的主要内容,如果未能解决你的问题,请参考以下文章

程序集特定设置未在运行时加载

Applet 和 Swing 未在 Eclipse 中显示组件

未在附加调试器的情况下运行时程序中断

Vue组件未在laravel中显示

.ico 图标未在 Windows 上显示

样式化组件未在 Chrome 中显示