========================================================================
 OutlookOstWatch —— Outlook OST/PST 邮箱文件体积监控与超限提醒
 版本：Windows 7 SP1 及以上，64 位
========================================================================

开 发 者 与 技 术 支 持
------------------------------------------------------------------------
  天津市奥赛德科技有限公司
  企业IT产品及解决方案专业供应商

    网　　址：https://www.tjosd.com
    电　　话：022-27452466
    微　　信：18622933309
    公 众 号：tjosd777
    地　　址：天津市南开区鞍山西道 445 号兴科大厦 637 室

  程序内也带着这些信息，安装者随时能看到：
    * 提醒窗口底部有一行技术支持署名
    * 开始菜单里有「OutlookOstWatch 联系方式」快捷方式，点开显示完整信息
    * 或直接执行：OutlookOstWatch.exe --about
    * 日志开头也会记录开发者信息

  想修改这些信息：编辑 config.json 里的 "vendor" 段即可，
  **不需要重新编译程序**，保存后重启程序生效。留空的字段不会显示。

一、它做什么
------------------------------------------------------------------------
1. 自动找出本机的 Outlook 数据文件（.ost / .pst）：
     - 读注册表 HKCU\Software\Microsoft\Office 与邮件配置文件提取文件路径
       （即使你把 OST 放在 D 盘或非默认目录也能找到）
     - 再扫描 Outlook 常见目录（含中文「Outlook 文件」等本地化目录名）
     - 还可在 config.json 的 extra_paths 里追加自己的路径（支持通配符）
2. 启动后立刻检查一次，之后每 60 分钟复查一次（可改）
3. 任何文件超过 40 GB（可改）就弹出置顶提醒窗口，显示「哪个文件、多大、在哪」；
   关掉后仍按周期再弹，直到体积回落到阈值以下，或你选择退出监控
4. 每一步都写日志，出问题可查

二、系统要求
------------------------------------------------------------------------
  * Windows 7 SP1 / 8.1 / 10 / 11，**64 位**
  * 不需要管理员权限，不需要预装 Python，不需要 .NET
  * **通用 C 运行库（UCRT）已随程序附带**，Win7 上无需再装 KB2999226

三、安装
------------------------------------------------------------------------
1. 右键 OutlookOstWatch-Install.zip →「解压全部」（Win7 自带的解压即可，
   不需要 7-Zip / WinRAR）
2. 进入解压出来的文件夹，双击 install.bat
3. 它会依次完成：
     xcopy 复制程序到 %LOCALAPPDATA%\OutlookOstWatch
     写入 config.json / README.txt / check-now.bat / uninstall.bat
     注册登录自启动（计划任务；失败则自动改用「启动」文件夹快捷方式）
     立即启动监控
4. 卸载：双击套件或安装目录里的 uninstall.bat

四、怎么确认它在工作
------------------------------------------------------------------------
程序平时**隐藏运行、没有托盘图标、没有任务栏图标**（这是设计如此，只在超限时
弹窗），所以"看不到它"不等于"它没跑"。验证方法：

  1. 双击 check-now.bat：跑一次检查并把最近日志显示出来
  2. 直接看日志：%LOCALAPPDATA%\OutlookOstWatch\OutlookOstWatch.log
  3. 任务管理器里应能看到 OutlookOstWatch.exe
  4. 想看提醒窗口长什么样：在安装目录执行
       OutlookOstWatch.exe --selftest
     （用假数据弹一次，约 4 秒后自动关闭）

五、重要：什么情况下它不会有任何反应
------------------------------------------------------------------------
本程序检测的是**经典版 Outlook（桌面版）**的本地数据文件 .ost/.pst。
如果你的电脑用的是：
  - **新版 Outlook（olk）**：邮件在云端，本地只有很小的 WebView 缓存，
    不会产生 .ost → 程序会记录「未发现 .ost/.pst 文件」，不报警（这是正常的）
  - 网页版 Outlook / Foxmail / 其他邮件客户端：同理，不适用
这类情况下程序不会误报，但也起不到监控作用——请确认目标机器装了经典版
Outlook（Office 2010/2013/2016/2019/2021 或 Microsoft 365 里的 Outlook 桌面版）。

六、配置（config.json）
------------------------------------------------------------------------
用记事本改，保存后重启程序生效：

  threshold_gb      数字，默认 40。超过就报警（1024 进制，即 GiB）
  interval_minutes  数字，默认 60。复查与重复弹窗的间隔（分钟）
  scan_pst          true/false，默认 true。是否把 .pst 也纳入检查
  extra_paths       数组，默认 []。额外扫描路径，支持通配符，例如：
                      ["D:\\Mail\\*.ost", "E:\\Backup\\Outlook"]
  log_file          字符串，默认 ""。留空 = 与 config.json 同目录

示例：
  {
    "threshold_gb": 30,
    "interval_minutes": 30,
    "scan_pst": false,
    "extra_paths": ["D:\\Mail\\*.ost"],
    "log_file": ""
  }

七、提醒窗口的按钮
------------------------------------------------------------------------
提醒窗口是 Windows 原生对话框（标题：Outlook 邮箱文件过大 —— 需要处理），
正文列出超限文件名与体积，三个按钮：

  ［是］    打开该文件所在文件夹
  ［否］    知道了，interval_minutes 分钟后再提醒（默认 1 小时）
  ［取消］  退出本次监控（本次开机不再提醒）

八、命令行
------------------------------------------------------------------------
  OutlookOstWatch.exe --once                  只检查一次，写日志后退出
                                              （退出码 1 = 有文件超限）
  OutlookOstWatch.exe --selftest              弹一次示例提醒窗口，约 4 秒后自动关闭
  OutlookOstWatch.exe --threshold-gb 30       临时覆盖阈值
  OutlookOstWatch.exe --interval-minutes 30   临时覆盖间隔
  OutlookOstWatch.exe --config D:\x.json      指定配置文件

九、已知限制
------------------------------------------------------------------------
1. 只做检测与提醒，**不会自动删除、移动、压缩任何邮件数据**。这类操作风险很高，
   必须由你本人在 Outlook 里处理（归档、清空「已删除邮件」、新建数据文件分流）。
2. 只检查当前用户能访问到的文件。若 OST 位于其他用户目录或无权限路径，会被跳过；
   可用 extra_paths 指定，并以有权限的账户运行。
3. 本包是 **64 位**版本，32 位系统无法运行。
4. 未做数字签名。Win7 上一般不会拦；Win10/11 首次运行 SmartScreen 可能提示
   「未知发布者」，选「更多信息 → 仍要运行」。
5. Win7 + 老版本 Outlook（如 Outlook 2003/2007）的默认数据文件上限更低
   （ANSI 格式 PST 仅 2 GB），40 GB 这个阈值对它们没有意义，请按实际版本调整。

十、构建信息
------------------------------------------------------------------------
  运行时   ：Python 3.8.10（最后一个支持 Windows 7 的版本）
  打包工具 ：PyInstaller 5.13.2（最后一个支持 Windows 7 的版本）
  界面     ：Win32 原生 MessageBox（刻意不依赖 tkinter/tcl-tk，
             避免运行库解包与图形库缺失问题）
  打包形式 ：onedir（文件夹版）。**刻意不用单文件 exe** —— 单文件版每次启动
             都要把运行库解包到临时目录，在受限环境或部分杀软下会失败。

  另外两个曾用过的方案及其废弃原因，供参考：
    - IExpress 生成 Setup.exe：它用 16 位 command.com 执行 .bat，
      而 64 位 Windows 没有 command.com，运行必报「系统找不到指定的文件」。
    - PyInstaller 6.x + Python 3.13 单文件版：Python 3.9 起已放弃 Win7
      （python313.dll 依赖仅 Win8+ 才有的 api-ms-win-core-path-l1-1-0.dll）。

十一、免责声明
------------------------------------------------------------------------
  本程序按「现状」免费提供，仅用于检测 Outlook 数据文件（.ost / .pst）的体积
  并在超过阈值时提醒。我们不对因使用或无法使用本程序造成的任何直接或间接
  损失承担责任；请在处理邮件数据前自行做好备份。
  本程序不主动联网、不上传任何数据；它只读取文件的体积，不读取邮件内容。
  本程序不提供免费咨询服务，相关业务请通过上方联系方式洽谈。

========================================================================
