在Xamarin UWP应用中如何获取当前Windows登录用户详情
获取Xamarin UWP应用中当前Windows AD登录用户详情的解决方案
我明白你在Xamarin UWP应用里获取AD登录ID时遇到了返回空的问题,之前尝试的方案可能因为权限配置或者API适配的问题没生效。下面给你一套可行的步骤:
一、先检查UWP项目的权限配置
这是很多人忽略的关键点,权限不足会直接导致获取用户信息失败:
- 打开你的UWP项目中的
Package.appxmanifest文件 - 切换到「功能」选项卡
- 勾选用户信息(User Information)权限;如果你的应用运行在企业域环境下,还可以额外勾选企业身份验证(Enterprise Authentication),确保应用能访问AD相关数据
二、创建平台特定的用户信息服务
因为Xamarin.Forms没有跨平台的AD用户信息API,我们需要借助UWP原生API实现,用DependencyService来调用:
1. 在共享项目中定义接口
public interface IUserInfoService { Task<string> GetCurrentADUserId(); }
2. 在UWP项目中实现接口
推荐使用微软推荐的Windows.System.User API(替代已弃用的UserInformation类):
using Windows.System; using Xamarin.Forms; [assembly: Dependency(typeof(UwpUserInfoService))] namespace YourAppNamespace.UWP { public class UwpUserInfoService : IUserInfoService { public async Task<string> GetCurrentADUserId() { try { // 获取当前系统用户 User currentUser = User.GetDefault(); // 请求用户的AD属性:UserPrincipalName是AD登录ID(格式如user@domain.com),SID是安全标识符 var userProperties = await currentUser.GetPropertiesAsync(new[] { "UserPrincipalName", "SID" }); // 优先返回UserPrincipalName,这是标准的AD登录标识 if (userProperties.TryGetValue("UserPrincipalName", out object upn)) { return upn.ToString(); } // fallback到SID(如果UPN无法获取) if (userProperties.TryGetValue("SID", out object sid)) { return sid.ToString(); } // 兼容旧API的备用方案(如果新API在某些环境下不生效) var domainName = Windows.System.UserProfile.UserInformation.GetDomainName(); var userName = Windows.System.UserProfile.UserInformation.GetUserName(); return $"{domainName}\\{userName}"; } catch (UnauthorizedAccessException) { // 权限不足时返回null,你可以在这里添加错误提示逻辑 return null; } } } }
三、在共享项目中调用服务
在需要获取用户ID的地方,通过DependencyService调用我们实现的服务:
var userInfoService = DependencyService.Get<IUserInfoService>(); string adUserId = await userInfoService.GetCurrentADUserId(); // 处理获取到的ID,比如打印或存储 if (!string.IsNullOrEmpty(adUserId)) { // 你的业务逻辑 } else { // 提示用户权限不足或无法获取信息 }
可能的问题排查
- 如果还是返回空,确认设备是否加入了Active Directory域,并且当前用户是域用户
- 检查
Package.appxmanifest是否正确保存了权限配置,有时候需要重启Visual Studio才能生效 - 测试时不要用模拟器,尽量用真实的域环境设备测试
内容的提问来源于stack exchange,提问作者Cin
相关产品推荐
相关产品推荐

