Toast 通知未显示在 IDE 调试器之外
Toast Notifications are not displaying outside IDE debugger
我已经构建了一个应该在 Windows 10 上显示 Toast 通知的应用程序,每次 FileSystemWatcher
检测到更改时。
我正在使用 Microsoft.Toolkit.Uwp.Notifications
和 Windows.UI.Notifications
命名空间。当运行 VS2019 中启用调试器的代码时,它可以完美运行,但是在使用自写的 WiX 安装程序安装应用程序后,我收到一条错误消息,然后应用程序关闭。
错误消息非常笼统,我不知道去哪里找:
Failed to show Notification for [FileSystemWatcher Name].
Element Not Found. (Exception from HRESULT: 0x80070490)
at Windows.UI.Notifications.ToastNotificationManager.CreateToastNotifier()
at ...
at .. rest of callstack is from the app, pointing towards the method with CreateToast
负责创建和显示 toasts 的class
using System;
using Windows.Data.Xml.Dom;
using Microsoft.Toolkit.Uwp.Notifications;
using Windows.UI.Notifications;
namespace MyApp.Notifs
{
public class NotificationToaster
{
private string appID;
//appID is read from the Properties
public NotificationToaster(string appID)
{
this.appID = appID;
}
public void ShowToast(string title, string content)
{
string toastXmlString =
$@"<toast>
<visual>
<binding template=""ToastGeneric"">
<text hint-maxLines=""1""> {title} </text>
<text> {content} </text>
<group>
<subgroup>
<text> {DateTime.Now} </text>
</subgroup>
</group>
</binding>
</visual>
<audio src=""ms-winsoundevent:Notification.Default""/>
</toast>";
CreateToast(toastXmlString);
}
private void CreateToast(string toast)
{
//Load Toast data from string to XML
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(toast);
// Create the toast notification
ToastNotification toastNotif = new ToastNotification(xmlDoc);
//Attach Manager to raise notifications
var toastNotifier = ToastNotificationManager.CreateToastNotifier(appID);
// And send the notification
toastNotifier.Show(toastNotif);
}
}
}
经过一番搜索,我尝试了几种解决方案。
我尝试的第一件事就是将应用程序打包到 Windows 应用程序打包项目 中,如 here 所述。 (虽然我还没有将 WPF 项目从 Framework 移植到 Core。)
SO 上的旧帖子建议在创建通知程序时使用应用程序 ID 作为参数。使用静态 GUID 执行此操作时,它会停止发送通知,同时命中所有断点。除了调试之外,程序不再崩溃,但也不会发送通知。
任何关于这里可能有什么问题的指示都会有很大的帮助。
如果您不打包您的应用程序,则必须按照 docs 中所述在“开始”中的应用程序快捷方式上声明您的应用程序用户模型 ID (AUMID) 和 toast 激活器 CLSID:
<Shortcut Id="ApplicationStartMenuShortcut" Name="Wix Sample" Description="Wix Sample" Target="[INSTALLFOLDER]WixSample.exe" WorkingDirectory="INSTALLFOLDER">
<!--AUMID-->
<ShortcutProperty Key="System.AppUserModel.ID" Value="YourCompany.YourApp"/>
<!--COM CLSID-->
<ShortcutProperty Key="System.AppUserModel.ToastActivatorCLSID" Value="{replaced-with-your-guid-C173E6ADF0C3}"/>
我已经构建了一个应该在 Windows 10 上显示 Toast 通知的应用程序,每次 FileSystemWatcher
检测到更改时。
我正在使用 Microsoft.Toolkit.Uwp.Notifications
和 Windows.UI.Notifications
命名空间。当运行 VS2019 中启用调试器的代码时,它可以完美运行,但是在使用自写的 WiX 安装程序安装应用程序后,我收到一条错误消息,然后应用程序关闭。
错误消息非常笼统,我不知道去哪里找:
Failed to show Notification for [FileSystemWatcher Name].
Element Not Found. (Exception from HRESULT: 0x80070490)
at Windows.UI.Notifications.ToastNotificationManager.CreateToastNotifier()
at ...
at .. rest of callstack is from the app, pointing towards the method with CreateToast
负责创建和显示 toasts 的class
using System;
using Windows.Data.Xml.Dom;
using Microsoft.Toolkit.Uwp.Notifications;
using Windows.UI.Notifications;
namespace MyApp.Notifs
{
public class NotificationToaster
{
private string appID;
//appID is read from the Properties
public NotificationToaster(string appID)
{
this.appID = appID;
}
public void ShowToast(string title, string content)
{
string toastXmlString =
$@"<toast>
<visual>
<binding template=""ToastGeneric"">
<text hint-maxLines=""1""> {title} </text>
<text> {content} </text>
<group>
<subgroup>
<text> {DateTime.Now} </text>
</subgroup>
</group>
</binding>
</visual>
<audio src=""ms-winsoundevent:Notification.Default""/>
</toast>";
CreateToast(toastXmlString);
}
private void CreateToast(string toast)
{
//Load Toast data from string to XML
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(toast);
// Create the toast notification
ToastNotification toastNotif = new ToastNotification(xmlDoc);
//Attach Manager to raise notifications
var toastNotifier = ToastNotificationManager.CreateToastNotifier(appID);
// And send the notification
toastNotifier.Show(toastNotif);
}
}
}
经过一番搜索,我尝试了几种解决方案。
我尝试的第一件事就是将应用程序打包到 Windows 应用程序打包项目 中,如 here 所述。 (虽然我还没有将 WPF 项目从 Framework 移植到 Core。)
SO 上的旧帖子建议在创建通知程序时使用应用程序 ID 作为参数。使用静态 GUID 执行此操作时,它会停止发送通知,同时命中所有断点。除了调试之外,程序不再崩溃,但也不会发送通知。
任何关于这里可能有什么问题的指示都会有很大的帮助。
如果您不打包您的应用程序,则必须按照 docs 中所述在“开始”中的应用程序快捷方式上声明您的应用程序用户模型 ID (AUMID) 和 toast 激活器 CLSID:
<Shortcut Id="ApplicationStartMenuShortcut" Name="Wix Sample" Description="Wix Sample" Target="[INSTALLFOLDER]WixSample.exe" WorkingDirectory="INSTALLFOLDER">
<!--AUMID-->
<ShortcutProperty Key="System.AppUserModel.ID" Value="YourCompany.YourApp"/>
<!--COM CLSID-->
<ShortcutProperty Key="System.AppUserModel.ToastActivatorCLSID" Value="{replaced-with-your-guid-C173E6ADF0C3}"/>