- 桌面应用
【免费下载链接】Notepads
A modern, lightweight text editor with a minimalist design.
导读
本文基于 Notepads 项目根目录的 PRIVACY.md 隐私政策文档,结合仓库内 AnalyticsService.cs、App.xaml.cs、Notepads.csproj 等源码,从政策条文、代码实现、用户权益三个层面,完整梳理 Notepads 采集哪些数据、为什么采集、如何采集、以及用户拥有哪些选择权。读完本文,你不仅能逐条读懂官方隐私政策,还能在源码层面验证每一条声明的真实性,掌握在 Windows 上管理 Notepads 诊断数据的具体方法。
一、政策文档定位与适用范围
Notepads 是一个采用极简设计的现代轻量级文本编辑器(A modern, lightweight text editor with a minimalist design)。它的隐私政策文档 PRIVACY.md 面向所有 Notepads 用户,说明三个核心问题:
- Notepads 收集哪些信息;
- Notepads 如何使用这些信息;
- 用户拥有哪些选择。
政策明确指出,Notepads 由开发者 Jiaqi (0x7c13) Liu 在 GitHub Notepads 社区协助下作为免费应用发布,免费提供且按"原样"(as is)提供。一旦用户选择使用该应用,即表示同意本政策所述的收集与使用方式。收集的数据仅用于提供和改进应用服务,除本政策描述的情形外,不会与任何人共享用户信息或使用数据。
二、信息收集与使用:两类遥测数据的边界
2.1 收集目标:改进体验与定位错误
政策明确:为提供更好的使用体验,Notepads 会收集部分使用数据(usage data)与错误信息(errors),目的仅有两个:
- 识别并修复问题(identifying issues);
- 改进用户体验(improving the user experience)。
2.2 不收集个人信息:无第三方身份识别服务
政策作出了一个关键承诺:Notepads 不使用任何可能收集可用于识别你身份信息的第三方服务(The app does NOT use third party services that may collect information used to identify you)。这意味着应用不接入广告 SDK、不接行为追踪网络、不采集可定位到具体个人的标识符。
2.3 采集服务的两次技术演进
政策记录了遥测基础设施的两个阶段,源码与项目文件完整印证了这一演进:
| 阶段 | 时间节点 | 遥测通道 | 仓库证据 |
|---|---|---|---|
| 第一阶段 | 历史版本(≤ v1.5.5.x) | Visual Studio App Center | 政策中提及 issue #334 记录了当时引入 App Center 的讨论 |
| 第二阶段 | v1.5.6.0 及以后 | Microsoft Store Services SDK(Store Engagement Framework) | Notepads.csproj 引用Microsoft.Services.Store.Engagement10.2307.3001;Notepads.csproj 声明Microsoft Engagement FrameworkSDK |
政策明确提示:Visual Studio App Center 计划于 2025 年 3 月 31 日停运(retirement),因此 Notepads v1.5.6.0+ 改用 Microsoft Store Services SDK 记录非隐私使用数据与错误(non-privacy usage data and errors)——"非隐私"三个字与 2.2 节"不收集身份识别信息"的承诺形成呼应。
三、源码级验证:遥测如何落地
3.1 统一入口:AnalyticsService
所有遥测行为收敛在唯一的静态服务类 AnalyticsService.cs 中,对外暴露两个方法:
public static void TrackEvent(string eventName, IDictionary<string, string> properties = null) public static void TrackError(Exception exception, IDictionary<string, string> properties = null)实现要点:
- 在静态构造函数中通过
StoreServicesCustomEventLogger.GetDefault()获取 Store Engagement 日志记录器,并包裹在try/catch中——初始化失败时静默降级(注释为 "best effort"),遥测故障不会影响编辑器主功能; TrackEvent调用Logger?.Log(eventName)记录事件名;TrackError将"Error - {exception.Message} - {exception.StackTrace}"拼入日志,附带异常消息与堆栈;- 所有调用同样以
try/catch包裹并注释 "best effort",保证遥测链路任何异常都不会向用户抛出。
3.2 启动阶段的采集面
应用每次启动时,App.xaml.cs 会组装两个字典并通过AnalyticsService.TrackEvent上报:
AppLaunch_Settings(启动配置):OSArchitecture、OSVersion、UseWindowsTheme、ThemeMode、UseWindowsAccentColor、AppBackgroundTintOpacity、ShowStatusBar、IsSessionSnapshotEnabled、IsShadowWindow、IsGameBarWidget、AlwaysOpenNewWindow、IsHighlightMisspelledWordsEnabled、IsSmartCopyEnabled、ExitWhenLastTabClosed。
AppLaunch_Editor_Settings(编辑器配置):EditorDefaultLineEnding、EditorDefaultEncoding、EditorDefaultTabIndents、EditorDefaultDecoding、EditorFontFamily、EditorFontSize、EditorFontStyle、EditorFontWeight、EditorDefaultSearchEngine、DisplayLineHighlighter、DisplayLineNumbers。
可以明显看出:这些都是应用自身的功能配置与运行环境信息(主题、字体、编码、换行符、系统版本等),不包含文件内容、文件路径正文或任何个人身份标识,与政策"仅收集基础使用数据与最小遥测"的表述一致。
3.3 全仓库的埋点分布
对AnalyticsService.TrackEvent / TrackError调用点的检索显示,遥测已覆盖应用生命周期的主要风险面,典型事件包括:
- 异常与崩溃:
OnUnhandledException、OnUnobservedException、AppFailedToActivate、FailedToLoadPage(见 App.xaml.cs); - 会话与文件恢复失败:
SessionManager_FailedToRecoverTextEditor、SessionManager_FailedToSaveBackupFile、SessionManager_FailedToDeleteOrphanedBackupFiles(见 SessionManager.cs); - 近期文件(MRU)异常:
MRUService_FailedToAddStorageItemToMRU、MRUService_FailedToGetMRU(见 MRUService.cs); - UI 功能开关:
MarkdownContentPreview_Opened、SideBySideDiffViewer_Opened、FileRenameDialogOpened(附带FileExists布尔值,见 FileRenameDialog.cs); - 文本操作失败:
TextEditorCore_FailedToDuplicateText、TextEditorCore_FailedToJoinText; - 外观渲染失败:
FailedToBuildAcrylicBrushInternal、FailedToLoadImageBrush、FailedToCreateAcrylicBrush(见 BrushUtility.cs)。
从这些事件名与属性可以推断:Notepads 的遥测策略是**"只采集能帮助复现与定位问题的技术上下文"——例如功能开关状态、异常消息、堆栈、系统版本,而不涉及用户编辑的文档正文内容**。
3.4 本地日志:LoggingService
除云侧遥测外,Notepads 还有一套纯本地的文件日志系统 LoggingService.cs,与遥测相互独立:
- 日志写入应用本地
Logs文件夹下以 UTC 时间命名的.log文件(见 FileSystemUtility 的GetOrCreateAppFolderAsync("Logs")调用); - 采用
ConcurrentQueue+SemaphoreSlim的异步批量落盘机制,每 10 秒尝试冲刷一次消息队列; - 记录格式为
{timestamp} [{level}] {message},支持 Info / Warning / Error 三个级别; - 这些日志文件留在用户设备本地,属于可自行查看与删除的调试材料。
四、数据安全声明
政策在 Data Security(数据安全)一节给出审慎表述:Notepads 重视用户信任,会采用**商业上可接受的方式(commercially acceptable means)**保护个人信息,但同时明确提醒:互联网传输或电子存储没有任何方式能做到 100% 安全可靠,应用无法保证信息的绝对安全。
这是一段不夸大、不承诺绝对安全的行业标准表述,与 2.2 节"最小化采集"的策略共同构成 Notepads 隐私设计的两根支柱:能少采就少采,采了就尽力保护。
五、政策更新与用户知情权
政策声明:
- 政策可能不时更新,更新后的新政策会直接发布在本页面,发布后立即生效(effective immediately);
- 建议用户定期回看本页面以了解任何变更。
结合 3.2 节的启动埋点可知,应用启动时上报的AppLaunch_Settings中包含OSVersion等环境信息,用户可以通过 Windows 系统设置中的应用诊断数据开关控制这类数据的系统级传输;但就 Notepads 应用本身而言,官方策略是"原样使用即表示同意",用户如需停止遥测,最彻底的方式是卸载应用或禁用系统级诊断数据上报。
六、联系与反馈渠道
对隐私政策有任何疑问或建议的用户,可直接联系项目维护方,官方联系邮箱为notepadsapp@outlook.com。
七、总结:政策与实现的一致性核对
将政策条文与仓库源码对照,可得到如下一致性结论:
| 政策声明 | 源码印证 | 一致性 |
|---|---|---|
| 仅收集基础使用数据与最小遥测 | App.xaml.cs 的启动配置事件仅含系统/功能配置 | ✅ |
| 不使用可识别身份的第三方服务 | 项目仅依赖Microsoft.Services.Store.Engagement与本地 LoggingService.cs | ✅ |
| v1.5.6.0+ 改用 Store Services SDK | Notepads.csproj 引用 Store Engagement 包 | ✅ |
| 数据用于识别与改进问题 | TrackError记录异常消息与堆栈;各模块以*_FailedTo*命名埋点 | ✅ |
| 无法保证绝对安全 | Data Security 章节的审慎表述 | ✅ |
对于关心数据隐私的 Windows 用户,可以从三个层面管理风险:阅读并跟踪 PRIVACY.md 的更新;在 Windows 的"隐私与安全性 → 诊断和反馈"中控制系统级诊断数据传输;如需彻底停用,可卸载 Notepads。总体而言,Notepads 的隐私设计遵循"最小化采集 + 尽力保护 + 透明披露"的路线,本文提供的源码证据可作为你评估是否信任该应用时的第一手参考。
- 桌面应用
【免费下载链接】Notepads
A modern, lightweight text editor with a minimalist design.
相关推荐
Project AIRI 隐私政策全解析:数据收集范围、PostHog 第三方接入与用户数据权利
Project AIRI 隐私政策全解析:数据收集范围、PostHog 第三方接入与用户数据权利 本篇文章以 Project AIRI 官方隐私政策( docs
AI 应用人工智能大模型数字人AI Agent语音前端后端桌面应用移动开发即时通讯3D渲染代码质量检测实用指南:用 fuck-u-code 快速评估复杂度、重复率与维护难度
代码质量检测实用指南:用 fuck u code 快速评估复杂度、重复率与维护难度 代码写到一定规模后,最让人头疼的往往不是"能不能跑",而是"还能不能改"。f
开发工具代码质量静态分析CLIAI 应用MCP 服务AI 技能Cherry Studio 隐私政策全解读:数据采集范围、本地存储机制与第三方服务边界
Cherry Studio 隐私政策全解读:数据采集范围、本地存储机制与第三方服务边界 Cherry Studio(一款集智能对话、自主 Agent 与 300
AI 应用大模型桌面应用本地部署RAG
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考