我有一个Windows 8.1应用程序,用作LOB应用程序。
应用程序让域用户使用以下代码行:
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应用程序。
答案 0 :(得分:0)
Windows 10中不再存在UserInformation类。
查看此链接: https://msdn.microsoft.com/library/windows/apps/windows.system.userprofile.userinformation.aspx
如果向下滚动以注释,您会发现UserInformation类已被User类替换:
Windows 10:
使用UserInformation类编号为Windows 8编译的应用程序 在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设置用户界面的“隐私”页面中 (设置>隐私>帐户信息)。这允许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 VM并在其中测试应用程序。 (不完美,但至少它是什么)