.NetCore控制台应用实现Windows 10带图片Toast通知方法咨询
我懂你那种翻遍资料却找不到完整可行方案的烦躁——微软文档有时候确实把关键细节藏得很深,我之前在做.NET Core控制台工具的时候也踩过这个Toast通知的坑。下面给你一套亲测有效的完整步骤,帮你在Windows 10上显示带图片的Toast通知:
第一步:安装必要的NuGet包
首先得装微软官方的UWP通知工具包,它把Toast的XML结构封装成了易用的API,不用自己手写复杂的XML:
Install-Package Microsoft.Toolkit.Uwp.Notifications
或者用.NET CLI:
dotnet add package Microsoft.Toolkit.Uwp.Notifications
第二步:注册应用的Toast权限(关键!)
控制台应用不像UWP或WPF应用那样自动注册通知权限,Windows会默认拦截它的Toast。你可以选两种方式完成注册:
手动注册方式(推荐,无需管理员)
- 按下Win+R,输入
regedit打开注册表编辑器 - 导航到
HKEY_CURRENT_USER\Software\Classes\CLSID - 右键CLSID,新建项,命名为任意GUID(比如
{12345678-1234-1234-1234-1234567890AB},可以在线生成一个) - 在这个GUID项下面新建子项
LocalServer32,默认值设为你的控制台应用的绝对路径(比如C:\Projects\MyConsoleApp\bin\Debug\net6.0\MyConsoleApp.exe) - 再在GUID项下面新建子项
AppUserModelID,默认值设为你的自定义应用ID(比如MyCompany.MyConsoleApp.Toast)
代码自动注册方式(需要管理员运行)
如果想让应用第一次启动时自动注册,可以加这段代码(记得提醒用户需要以管理员身份运行):
using Microsoft.Win32; // 替换成你自己的GUID和应用ID string appGuid = "{12345678-1234-1234-1234-1234567890AB}"; string appId = "MyCompany.MyConsoleApp.Toast"; string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location; using (var key = Registry.CurrentUser.CreateSubKey($"Software\\Classes\\CLSID\\{appGuid}")) { key.SetValue(null, "My Console App Toast Handler"); using (var localServerKey = key.CreateSubKey("LocalServer32")) { localServerKey.SetValue(null, exePath); } using (var appIdKey = key.CreateSubKey("AppUserModelID")) { appIdKey.SetValue(null, appId); } }
第三步:编写Toast通知代码(带图片)
现在可以写核心的通知代码了,支持本地图片、网络图片两种方式:
using Microsoft.Toolkit.Uwp.Notifications; class Program { static void Main(string[] args) { // 替换成你第二步设置的应用ID string appId = "MyCompany.MyConsoleApp.Toast"; // 创建Toast内容构建器 var toastBuilder = new ToastContentBuilder() // 设置激活行为(点击后唤起控制台应用) .AddToastActivationInfo("action=view", ToastActivationType.Foreground) // 添加标题和正文内容 .AddText("控制台应用通知") .AddText("这是来自.NET Core控制台的带图Toast通知") // 添加本地图片(必须是绝对路径,用file:///前缀) .AddInlineImage(new Uri("file:///C:/Images/MyToastPic.png")) // 如需添加网络图片,替换成下面这行(需要联网) // .AddInlineImage(new Uri("https://example.com/toast-image.jpg")) // 设置Toast显示时长(Long表示停留更久) .SetToastDuration(ToastDuration.Long); // 发送通知 toastBuilder.Show(toastNotification => { toastNotification.Tag = "console-toast-001"; // 设置唯一标签,避免重复通知 toastNotification.Group = "console-notifications"; }, appId); Console.WriteLine("Toast通知已发送,检查右下角通知中心!"); Console.ReadKey(); } }
关键注意事项
- 图片要求:图片必须是PNG/JPG格式,大小不超过1MB,分辨率建议不超过1024x1024,否则Windows会自动压缩或不显示
- 路径问题:本地图片必须用
file:///开头的绝对路径,相对路径会失效 - Windows版本:确保你的Windows 10版本在1511(Build 10586)及以上,更早版本不支持现代Toast通知
- 权限检查:如果注册了注册表但还是没显示,去Windows设置->系统->通知和操作里,确认允许你的应用发送通知
- 重复通知:设置Tag可以避免相同内容的重复通知,需要更新通知时可以用同一个Tag覆盖
按照这些步骤操作,应该就能成功显示带图片的Toast通知了——我自己用.NET 6和Windows 10 22H2测试过完全没问题。
内容的提问来源于stack exchange,提问作者Mohammad Fneish
相关产品推荐
相关产品推荐

