Уведомление Windows, созданное с помощью NotifyIcon, показывает «microsoft.explorer.notification» и идентификатор GUID

#c# #wpf #notifyicon

#c# #wpf #уведомительный значок

Вопрос:

Мы написали настольное приложение WPF для Windows. Приложение запускается при запуске и в основном работает в фоновом режиме, но имеет пользовательский интерфейс, доступный через системный трей. Иногда приложению необходимо о чем-то уведомить пользователя, и поэтому для этого мы используем библиотеку NotifyIcon для создания уведомлений. Вот соответствующий код:

XAML:

 <mui:ModernWindow
    ...
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:tb="http://www.hardcodet.net/taskbar" 
    ... >

    <tb:TaskbarIcon
            x:Name="MyAppIcon"
            ...
    </tb:TaskbarIcon>
</mui:ModernWindow>
 

Код на C #, стоящий за:

 using Hardcodet.Wpf.TaskbarNotification

public void ShowStartupBalloon(string message)
{
    // show balloon with built-in icon ie 'Info'
    MyAppIcon.ShowBalloonTip(Properties.Resources.App_Title, message, BalloonIcon.Info);
}
 

Уведомления отображаются в виде небольших плавающих окон рядом с панелью задач, но (иногда, не всегда) они содержат строку «microsoft.explorer.notification» и GUID.

Уведомление с нежелательным текстом и GUID

Мы хотели бы устранить их, поскольку они сбивают с толку наших клиентов; многие думают, что произошла какая-то ошибка в программном обеспечении. Кто-нибудь знает, как подавить это, чтобы отображать только текст уведомления, которое мы предоставили?

Комментарии:

1. Нашли ли вы решение этой проблемы? У меня периодически возникает такая же проблема с приложением winform.

2. @Steve0212 Нет, у меня все еще есть эта проблема.

3. Вы пытались обновить как Windows, так и Hardcodet.NotifyIcon.Wpf пакет? У меня нет этой проблемы с простым автономным приложением, содержащим только a TaskbarIcon . Это может быть связано с самой Windows или с чем-то неправильным, что приложение делает в фоновом режиме или во время установки.

Ответ №1:

Я также столкнулся с этой проблемой. Из того, что я собрал, этот нижний текст — это способ Microsoft убедиться, что пользователь знает источник уведомления, и что случайные программы не могут выдавать себя за подлинное уведомление Windows. Похоже, что включение всплывающего окна (в вашем случае значка информации) вызывает это.

В результате вы можете полностью удалить этот текст, не указывая BalloonTipIcon, либо вообще не определяя свойство, либо определяя его как None:

 MyAppIcon.ShowBalloonTip(Properties.Resources.App_Title, message, BalloonIcon.None);
 

Конечно, единственным компромиссом является то, что у вашего уведомления не будет значка.

Надеюсь, это поможет.

Ответ №2:

Показывать значок с автоматическим таймаутом:

 public static void ShowBalloon(string title, string body)
{
    // Show with icon
    NotifyIcon ni = new NotifyIcon() { Visible = true, Icon = Properties.Resources.Icon};

    // Timeout is deprecated since Vista
    ni.ShowBalloonTip(0, title, body, ToolTipIcon.None);

    // Dispose on event
    ni.BalloonTipClosed  = (sender, e) => ni.Dispose();
}
 

Ответ №3:

Microsoft.Explorer.Текст уведомления отображается из-за немедленного удаления объекта NotifyIcon.

Так что, в основном, если вы вызываете

 MyAppIcon.ShowBalloonTip(5000);
MyAppIcon.Dispose();
 

вы получаете Microsoft.Explorer.Уведомление.{GUID} вместо имени приложения в заголовке уведомления.

Чтобы исправить это, избегайте прямого удаления и используйте то, что предложил Бени:

 MyAppIcon.BalloonTipClosed  = (sender, e) => MyAppIcon.Dispose();