WPF订阅UserNotificationListener.NotificationChanged时RPC失败求助
问题描述
在WPF框架下使用UserNotificationListener时,仅部分PC上出现异常:执行事件订阅代码时抛出RPC调用失败错误,权限请求和状态判断流程均正常。已安装Microsoft.Windows.SDK.Contracts 10.0.22621.755。
代码示例
初始触发错误的代码:
UserNotificationListener notifiacationListener = UserNotificationListener.Current; notifiacationListener.NotificationChanged += Listener_NotificationChanged;
已尝试的权限判断后订阅代码:
UserNotificationListener notifiacationListener = UserNotificationListener.Current; if (notifiacationListener.GetAccessStatus() == UserNotificationListenerAccessStatus.Allowed) { notifiacationListener.NotificationChanged += Listener_NotificationChanged; }
已尝试的提前请求权限代码:
notificationStatus = await notifiacationListener.RequestAccessAsync();
报错信息
System.Exception: 'The remote procedure call failed. (Exception from HRESULT: 0x800706BE)'
排查建议
检查系统通知相关服务状态
0x800706BE本质是RPC调用失败,大概率是系统通知服务未正常运行。打开services.msc,确认Windows Push Notifications System Service和User Data Access Service处于“正在运行”状态,启动类型为“自动”。若未运行,手动启动后重试。验证Windows版本兼容性
你使用的SDK Contracts 10.0.22621.755对应Windows 11 22H2版本,出错PC可能未升级到该版本。按Win+R输入winver查看系统版本,确保≥22621;若版本过低,要么升级系统,要么降级SDK Contracts到对应系统版本的兼容包。确认应用运行权限与系统通知设置
- 尝试以管理员身份启动应用,排除权限不足导致的RPC调用失败;
- 检查系统设置→系统→通知,确保你的应用通知已被开启,且权限设置正确。
延迟事件订阅时机
可能在UserNotificationListener实例未完全初始化时订阅事件导致异常,尝试延迟订阅:var notifiacationListener = UserNotificationListener.Current; await Task.Delay(100); // 短延迟等待实例初始化完成 if (notifiacationListener.GetAccessStatus() == UserNotificationListenerAccessStatus.Allowed) { notifiacationListener.NotificationChanged += Listener_NotificationChanged; }清理通知缓存
通知缓存损坏可能导致服务异常:- 打开系统设置→系统→通知→高级通知设置,找到你的应用并点击“重置通知权限”;
- 或备份
C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Notifications下的文件后删除,重启PC重试。
内容的提问来源于stack exchange,提问作者steam3d

