Windows store apps 用户名为System.User

Windows store apps 用户名为System.User,windows-store-apps,windows-10,Windows Store Apps,Windows 10,今天我想在我的应用程序中用名字来问候用户,但我没能做到 我找到了System.User,但由于缺少一些示例,我无法获得所需的信息。我认为不可能让当前用户(id)调用user.GetFromId() 你能把我引向正确的方向吗?我走错路了吗?好的,首先,访问用户的个人信息是您必须申请的特权,因此在应用商店的Package.appxmanifest中,您需要在“功能”选项卡中启用“用户帐户信息”功能 接下来,您将希望使用Windows.System.User类,而不是System.User(Syste

今天我想在我的应用程序中用名字来问候用户,但我没能做到

我找到了
System.User
,但由于缺少一些示例,我无法获得所需的信息。我认为不可能让当前用户(
id
)调用
user.GetFromId()


你能把我引向正确的方向吗?我走错路了吗?

好的,首先,访问用户的个人信息是您必须申请的特权,因此在应用商店的Package.appxmanifest中,您需要在“功能”选项卡中启用“用户帐户信息”功能

接下来,您将希望使用Windows.System.User类,而不是System.User(System.User对Windows应用商店应用程序不可用,鉴于您为问题提供的标记,您似乎正在讨论该应用商店应用程序)

第三,你需要这样的个人信息

IReadOnlyList<User> users = await User.FindAllAsync(UserType.LocalUser, UserAuthenticationStatus.LocallyAuthenticated);
User user = users.FirstOrDefault();
if (user != null)
{
   String[] desiredProperties = new String[]
   {
      KnownUserProperties.FirstName,
      KnownUserProperties.LastName,
      KnownUserProperties.ProviderName,
      KnownUserProperties.AccountName,
      KnownUserProperties.GuestHost,
      KnownUserProperties.PrincipalName,
      KnownUserProperties.DomainName,
      KnownUserProperties.SessionInitiationProtocolUri,
   };

   IPropertySet values = await user.GetPropertiesAsync(desiredProperties);
   foreach (String property in desiredProperties)
   {
      string result;
      result = property + ": " + values[property] + "\n";
      System.Diagnostics.Debug.WriteLine(result);
   }
}
IReadOnlyList users=wait User.findalsync(UserType.LocalUser,UserAuthenticationStatus.LocallyAuthenticated);
User=users.FirstOrDefault();
如果(用户!=null)
{
字符串[]desiredProperties=新字符串[]
{
KnownUserProperties.FirstName,
KnownUserProperties.LastName,
KnownUserProperties.ProviderName,
KnownUserProperties.AccountName,
KnownUserProperties.GuestHost,
KnownUserProperties.PrincipalName,
KnownUserProperties.DomainName,
KnownUserProperties.SessionInitiationProtocolUri,
};
IPropertySet values=等待用户.GetPropertiesAsync(desiredProperties);
foreach(desiredProperties中的字符串属性)
{
字符串结果;
结果=属性+”:“+值[属性]+”\n”;
系统.诊断.调试.写入线(结果);
}
}
当您调用GetPropertiesAsync时,您的用户将从系统中获得一个权限提示,询问他们是否希望授予您访问权限。如果他们回答“否”,你将得到一个空的用户对象(但如果他们再次使用该应用程序,你仍然可以得到一个唯一的令牌来区分该用户)

如果他们回答是,您将能够访问以下属性以及其他各种属性


有关更多示例,请参阅Microsoft提供的。

您的意思是说您有一个用户对象,但不知道如何从中查找名称,或者您不知道如何获取代表当前用户的用户对象?我说的是不获取对象。
findalsync
的文档没有说明第一个匹配必须是当前用户。如果同时有多个用户登录,那么该代码是否真的有效?在终端服务器上测试该行为可能是值得的,但据我所知,UserType.LocalUser、UserAuthenticationStatus.LocallyAuthenticated标志应该确保它返回本地用户。当然,我也不确定这在远程桌面上是如何运行的,也不确定这算是远程还是本地。奇怪的是,似乎到处都没有“运行此应用程序的用户”的静态属性。我可能还应该补充一点,该API很可能是在考虑xbox的情况下制作的,在本地可以同时对多个用户进行身份验证,因此在考虑它时可能是值得的