我有一个电子应用程序。它曾经像往常一样显示通知(Win11),但有一天我把它们从通知磁贴上关掉了。现在我不能把它们换回来了。
Notification-example
我尝试添加app.on('ready', () => app.setAppUserModelId("Your.AppName"));
,并在构建"win": { "appId":"Your.AppName" }
的windows部分添加了package.json
但似乎什么都不管用。
我有一个电子应用程序。它曾经像往常一样显示通知(Win11),但有一天我把它们从通知磁贴上关掉了。现在我不能把它们换回来了。
Notification-example
我尝试添加app.on('ready', () => app.setAppUserModelId("Your.AppName"));
,并在构建"win": { "appId":"Your.AppName" }
的windows部分添加了package.json
但似乎什么都不管用。
1条答案
按热度按时间hmae6n7t1#
在2023年的Windows 11中再次获得通知的最快方法(因为这个过程似乎不时会发生变化):
1.按
Win+R
,键入services.msc
,然后按回车键打开“Services”窗口1.向下滚动找到“Windows推送通知用户服务”(将有两个“Windows推送通知”服务,其中一个是“用户服务”),并停止它
1.按
Win+R
,键入regedit
,然后按回车键打开注册表编辑1.使用
File > Export...
备份您的注册表,以防出现问题(这不会发生,但你知道,以防万一)1.导航到键
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings
1.在该键中,您将找到Electron应用程序ID(默认ID为
electron.app.Electron
)1.要么将
Enabled
属性设置为1
,要么删除应用程序的密钥。如果您找不到密钥和/或不介意重置通知设置,您甚至可以从Notifications
中删除整个Settings
密钥。1.导航到
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\PushNotifications\Backup
1.你会发现另一个键有相同的应用程序ID,删除它(同样,如果你不介意重置,完全删除
Backup
)1.关闭regedit
1.打开资源管理器,导航到
%LOCALAPPDATA%\Microsoft\Windows\Notifications
(您可以将其复制粘贴到资源管理器的地址栏中)1.删除您在那里找到的三个
wpndatabase.*
文件。当服务重新启动时,这些将从注册表的Backup
项中的剩余内容恢复1.再次关闭Explorer
1.在服务窗口中,重新启动已停止的服务
1.通知现在应该再次工作。
我在我的机器上测试了多次,可以确认完全删除注册表项和数据库文件肯定会起作用,以防你在那里找不到你的应用程序的ID。
编辑解决问题的实际问题:
要让您的Electron应用程序显示在Windows通知中心,必须满足两个条件:
1.你的应用必须有一个App-ID设置为
app.setAppUserModelId("<myAppId>");
,所以如果你已经有了,那很好。1.启动您的应用程序的Electron可执行文件必须具有开始菜单快捷方式。根据您构建和安装应用程序的工具以及您启动应用程序的方式,这可能会自动发生或不会发生:
如果您在
dependencies
中不使用除electron
之外的任何东西,并从electron .
开始,恐怕我不知道任何方法(尚未)使其与Windows 11一起工作。关于这个主题的文档提到将electron.exe
从本地node_modules
添加到开始菜单,但是我在不同的组合中测试了这个,无法让它工作。通知可以正常工作,但该应用不会出现在通知中心中。然而,真正有效的方法是使用
electron-forge
或electron-builder
这样的构建工具来构建应用程序。他们的关键是,他们产生了一个Squirrel.Windows
distributable处理快捷方式和一切为您。我个人使用电子锻造,所以我只有经验。但是,这些工具仍然可以生成一个文件夹,其中包含构建的应用程序和完整的安装程序包。将可执行文件从构建文件夹发送到开始菜单或运行安装程序将设置所有内容。如果它不能立即工作,您可能需要使用上述步骤再次清理注册表。
如果你还没有使用这些工具,那么将它们集成到现有的应用程序中应该是相对容易的,或者反过来,用它们的初始化器之一建立一个空项目,并将现有的代码集成到该项目中。如果你需要帮助,打开另一个问题,我很乐意帮助你。