为什么打包的单窗口WinForms应用任务栏不显示徽章通知?
行为说明
你遇到的属于Windows平台对打包Win32应用的默认预期行为。默认状态下,打包后的WinForms等桌面应用的单窗口任务栏图标未与应用包的身份标识(AUMID,应用用户模型ID)完成绑定,系统只会将徽章通知同步到开始菜单的应用入口,不会同步到单窗口的任务栏图标;多窗口打开时系统会自动触发身份关联逻辑,所以徽章可以正常显示,关闭第二个窗口后关联失效,徽章随之消失。
解决方案
按照以下两步配置即可实现单窗口下任务栏正常显示徽章:
- 修改打包应用的清单文件(Package.appxmanifest)
打开你打包项目的Package.appxmanifest,首先在根节点<Package>中声明所需的扩展命名空间:
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" xmlns:desktop4="http://schemas.microsoft.com/appx/manifest/desktop/windows10/4" IgnorableNamespaces="uap rescap desktop desktop4">
之后在<Applications>节点下的对应<Application>节点内添加桌面扩展声明,明确关联应用的任务栏行为和通知身份:
<Applications> <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$"> <!-- 此处保留原有其他配置 --> <Extensions> <desktop:Extension Category="windows.toastNotificationActivation"> <desktop:ToastNotificationActivation ToastCapable="true" /> </desktop:Extension> <desktop4:Extension Category="windows.appIcons"> <desktop4:AppIcons> <desktop4:AppIcon DisplayName="你的应用名称" Resource="Images\Square44x44Logo.targetsize-32_altform-unplated.png" /> </desktop4:AppIcons> </desktop4:Extension> </Extensions> </Application> </Applications>
- 在主窗口初始化时显式绑定AUMID
在WinForms主窗体的构造函数或Form_Load事件中添加代码,将当前窗口与打包应用的AUMID绑定:
using System; using System.Runtime.InteropServices; using System.Windows.Forms; public partial class MainForm : Form { [DllImport("shell32.dll", SetLastError = true)] private static extern int SetWindowProperty(IntPtr hwnd, string key, IntPtr value); private void SetWindowAumid(IntPtr hwnd, string aumid) { const string AppUserModelIdKey = "System.AppUserModel.ID"; var hGlobal = Marshal.StringToHGlobalUni(aumid); try { SetWindowProperty(hwnd, AppUserModelIdKey, hGlobal); } finally { Marshal.FreeHGlobal(hGlobal); } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); // 获取当前打包应用的AUMID var aumid = Windows.ApplicationModel.AppInfo.Current.Id.UserModelId; SetWindowAumid(this.Handle, aumid); } }
以上配置要求系统版本最低为Windows 10 1903(18362),与你当前使用的目标框架要求的系统版本一致,无需额外降级适配。完成配置后重新编译打包,单窗口状态下任务栏即可正常显示徽章通知。
内容的提问来源于stack exchange,提问作者Carl Gronvald
相关产品推荐
相关产品推荐

