release: 发布 v0.2.0
本次发布聚焦降低误报风险、规范发布产物和重构仓库文档。 主要变更: - 删除开机自启功能,移除 Windows 启动项注册表写入逻辑。 - 新增标准应用清单,声明应用以普通用户权限运行。 - 新增 framework-dependent 发布脚本,保持发布包不内置 .NET 运行时。 - 禁用单文件、自解压、裁剪和 ReadyToRun 发布方式,保持产物结构透明。 - 将发布资产命名规范化为 omni-notify-v0.2.0-win-x64.zip。 - 重写文档结构:README.md 面向用户,docs/development.md 面向开发者。 - 删除过时且内容重复的 PRD.md 与 docs/usage.md。 验证: - dotnet build .\OmniNotify.csproj -c Release 构建通过。 - 发布脚本成功生成 v0.2.0 win-x64 压缩包。 - 发布目录未包含 coreclr.dll、hostfxr.dll、hostpolicy.dll 等 .NET 运行时文件。
This commit is contained in:
164
README.md
164
README.md
@@ -1,36 +1,154 @@
|
||||
# Omni-Notify
|
||||
# Omni-Notify 用户文档
|
||||
|
||||
Omni-Notify is a Windows 10+ WPF desktop app for receiving local structured messages and showing configurable, non-interactive visual popups.
|
||||
Omni-Notify 是一款 Windows 本地通知弹窗工具。它接收来自本机脚本、自动化任务或其他程序的结构化消息,并以可配置的频道样式显示轻量弹窗。
|
||||
|
||||
## Tech Stack
|
||||
它适合这些场景:
|
||||
|
||||
- .NET 8 WPF for the desktop UI and popup windows
|
||||
- Windows Forms `NotifyIcon` for the system tray entry
|
||||
- Built-in `HttpListener` for local message intake
|
||||
- JSON persistence under `%LOCALAPPDATA%\OmniNotify\state.json`
|
||||
- 构建、部署、备份等脚本完成后弹出提示。
|
||||
- 本地监控任务发现异常时发出视觉提醒。
|
||||
- 工作流工具向桌面发送不抢焦点的状态通知。
|
||||
- 不想使用系统通知中心,希望弹窗样式、位置和历史记录可控。
|
||||
|
||||
## Local Message API
|
||||
## 安装要求
|
||||
|
||||
When the app is running, it listens by default on:
|
||||
- Windows 10 或更高版本
|
||||
- .NET 8 Desktop Runtime
|
||||
|
||||
Omni-Notify 的发布包不内置 .NET 运行时,因此体积较小。首次运行前,请确认电脑已安装 .NET 8 Desktop Runtime。
|
||||
|
||||
## 下载与运行
|
||||
|
||||
下载发布包:
|
||||
|
||||
```text
|
||||
omni-notify-v0.2.0-win-x64.zip
|
||||
```
|
||||
|
||||
解压后运行:
|
||||
|
||||
```text
|
||||
OmniNotify.exe
|
||||
```
|
||||
|
||||
应用启动后会出现在系统托盘。左键点击托盘图标可显示或隐藏主控制面板,右键点击可打开菜单。
|
||||
|
||||
## 快速发送一条通知
|
||||
|
||||
默认接收地址:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:19845/notify
|
||||
```
|
||||
|
||||
Send a POST request with UTF-8 JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"channel": "default",
|
||||
"title": "Build finished",
|
||||
"body": "The nightly job completed successfully."
|
||||
}
|
||||
```
|
||||
|
||||
Channels must be created in the control panel first. Unknown channels are blocked and recorded in history as `IllegalChannel`.
|
||||
|
||||
## Build
|
||||
PowerShell 示例:
|
||||
|
||||
```powershell
|
||||
dotnet build
|
||||
Invoke-RestMethod `
|
||||
-Uri "http://127.0.0.1:19845/notify" `
|
||||
-Method Post `
|
||||
-ContentType "application/json; charset=utf-8" `
|
||||
-Body '{"channel":"default","title":"Build finished","body":"The nightly job completed successfully."}'
|
||||
```
|
||||
|
||||
JSON 字段说明:
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `channel` | 是 | 频道名称,必须已在主面板中创建 |
|
||||
| `title` | 否 | 弹窗标题 |
|
||||
| `body` | 否 | 弹窗正文 |
|
||||
|
||||
如果发送到不存在的频道,消息不会弹窗,但会在历史记录中标记为无效频道。
|
||||
|
||||
## 频道
|
||||
|
||||
频道用于区分不同来源或不同用途的通知。每个频道都可以独立配置弹窗样式。
|
||||
|
||||
常见用法:
|
||||
|
||||
- `default`:普通通知。
|
||||
- `build`:构建或 CI 任务。
|
||||
- `monitor`:监控告警。
|
||||
- `backup`:备份任务。
|
||||
|
||||
在主控制面板的“频道”页中可以新建、删除、重命名频道,并配置该频道的显示效果。
|
||||
|
||||
## 弹窗样式
|
||||
|
||||
每个频道支持配置:
|
||||
|
||||
- 显示器序号和屏幕位置。
|
||||
- 边距、宽度、最大高度和内边距。
|
||||
- 字体、标题字号、正文字号。
|
||||
- 文本颜色、背景颜色、边框颜色和透明度。
|
||||
- 存在时间、进入动画和退出动画。
|
||||
- 多条消息的堆叠方式。
|
||||
- 正文过长时的截断、滚动或拆分显示方式。
|
||||
|
||||
建议先配置频道,再点击“发送测试”观察实际效果。
|
||||
|
||||
## 历史记录
|
||||
|
||||
历史记录页会记录接收过的消息,包括:
|
||||
|
||||
- 接收时间
|
||||
- 频道
|
||||
- 状态
|
||||
- 标题
|
||||
- 正文
|
||||
|
||||
你可以搜索、筛选、清空历史记录,也可以右键复制消息内容或重新显示某条历史消息。
|
||||
|
||||
## 全局设置
|
||||
|
||||
全局设置包括:
|
||||
|
||||
- 免打扰模式:继续接收消息并记录历史,但不弹窗。
|
||||
- 每秒最多处理消息数:超过阈值后触发熔断保护。
|
||||
- 历史保留天数。
|
||||
- 历史最多保留条数。
|
||||
- 本地监听端口。
|
||||
|
||||
Omni-Notify v0.2.0 已移除开机自启功能。应用不会写入 Windows 启动项注册表。
|
||||
|
||||
## 熔断保护
|
||||
|
||||
如果短时间内收到大量消息,Omni-Notify 会自动进入熔断状态,防止弹窗刷屏或持续写入大量历史记录。
|
||||
|
||||
触发熔断后,你可以在托盘菜单或全局设置页中手动解除。
|
||||
|
||||
## 常见问题
|
||||
|
||||
**发送请求后没有弹窗**
|
||||
|
||||
先确认频道名称是否存在,再确认是否开启了免打扰模式。也可以查看历史记录中的状态。
|
||||
|
||||
**提示无法连接本地地址**
|
||||
|
||||
确认 Omni-Notify 正在运行,并检查全局设置中的本地监听端口。如果修改了端口,请使用新的端口发送请求。
|
||||
|
||||
**为什么发布包这么小**
|
||||
|
||||
发布包采用 framework-dependent 模式,不内置 .NET 运行时。这样体积更小,文件结构也更透明。
|
||||
|
||||
**是否会开机自动启动**
|
||||
|
||||
不会。v0.2.0 已删除开机自启功能,也不会写入 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run`。
|
||||
|
||||
**杀毒软件仍然提示风险怎么办**
|
||||
|
||||
建议使用正式签名的发布版本,并避免从不可信来源下载。Omni-Notify 的官方发布方式不使用混淆、壳、自解压或单文件打包。
|
||||
|
||||
## 数据位置
|
||||
|
||||
配置和历史记录保存在:
|
||||
|
||||
```text
|
||||
%LOCALAPPDATA%\OmniNotify\state.json
|
||||
```
|
||||
|
||||
需要重置配置时,可以在退出应用后删除该文件。
|
||||
|
||||
## 面向开发者
|
||||
|
||||
如果你需要构建、修改或发布项目,请阅读 [开发者文档](docs/development.md)。
|
||||
|
||||
Reference in New Issue
Block a user