WinUI 3未打包应用实例化AppNotification触发COM异常0xC00CE556
解决未打包WinUI3应用中AppNotification实例化的COM异常0xC00CE556
问题根源
COM异常0xC00CE556本质是XML格式无效:AppNotification构造函数要求传入符合Windows Toast通知规范的XML payload,而非纯文本字符串。你传入的"test"不符合XML语法,直接触发解析错误。
解决方案步骤
1. 传入合法的Toast XML Payload
将纯文本替换为标准Toast模板,以下是最简单的文本通知示例:
string notificationContent = @" <toast> <visual> <binding template='ToastGeneric'> <text>测试通知</text> <text>这是一条WinUI3未打包应用的测试通知</text> </binding> </visual> </toast>";
你可以根据需求扩展模板,比如添加按钮、图片、进度条等,只要符合Windows Toast XML规范即可。
2. 为未打包应用配置AUMID
未打包WinUI3应用需要手动设置应用ID(AUMID),才能让通知系统正确识别应用,否则即使修复Payload,通知也可能无法正常显示或触发回调。
步骤1:全局单例管理通知服务
在App.xaml.cs中添加静态通知服务实例,避免每次点击重复创建和注册:
public static AppNotificationService AppNotificationService { get; } = new AppNotificationService();
步骤2:设置AUMID并初始化服务
在App.xaml.cs的OnLaunched方法中添加AUMID配置:
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) { // 设置唯一的AUMID,格式建议为「公司名.应用名」 AppNotificationManager.Default.SetAppId("YourCompany.YourAppName"); // 初始化全局通知服务 AppNotificationService.Initialize(); // 原有启动代码... }
步骤3:修改按钮点击事件
直接调用全局服务,无需重复创建实例:
private void CreateNotification_Click(object sender, RoutedEventArgs e) { string notificationContent = @" <toast> <visual> <binding template='ToastGeneric'> <text>测试通知</text> <text>这是一条WinUI3未打包应用的测试通知</text> </binding> </visual> </toast>"; App.AppNotificationService.Show(notificationContent); }
3. 验证系统通知权限
确保Windows系统通知中心未禁用你的应用通知权限:
- 打开「设置」→「系统」→「通知」
- 找到你的应用,确认「允许通知」开关处于开启状态
额外排查项(若通知仍无法显示)
手动添加注册表项确保系统识别AUMID:
- 打开注册表编辑器(
regedit) - 导航到
HKEY_CURRENT_USER\Software\Classes\AppUserModelId\YourCompany.YourAppName - 添加字符串值
DisplayName,设置为你的应用名称 - 添加字符串值
IconUri,设置为应用图标路径(如C:\Path\To\Your\App\icon.ico)
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

