通用 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的主要内容,如果未能解决你的问题,请参考以下文章