# WinSupervisor
**Repository Path**: 51diysoft/WinSupervisor
## Basic Information
- **Project Name**: WinSupervisor
- **Description**: WinSupervisor是一款针对windows的守护进程监测程,防止进程掉线、中断等,并通过邮件、短信、钉钉等实现告警信息发送通知,提升平台运行稳定性;
主要功能:
1、进程异常后主动尝试重启进程 ;
2、进程异常后写入到指定的日志 /数据库等,支持mysql和sqlserver ;
3、邮件、短信、钉钉等实现告警信息发送通知;4、进程异常后打开新的程序等
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2025-10-30
- **Last Updated**: 2026-02-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# WinSupervisor 进程守护程序
## 项目介绍
WinSupervisor是一款专业的Windows进程守护程序,用于监控关键进程的运行状态,确保它们持续稳定运行。当监控的进程异常退出时,系统会自动尝试重启进程,并通过多种渠道发送告警通知,大大提高系统的稳定性和可靠性。
## 核心功能
### 1. 进程监控与自动恢复
- 实时监控指定Windows进程的运行状态
- 当进程异常终止时,自动尝试重启
- 支持配置最大重启次数限制,避免无限循环重启
- 支持设置重启间隔时间,优化进程启动策略
### 2. 多渠道告警通知
- **邮件告警**:通过SMTP服务器发送邮件通知
- **短信告警**:支持配置短信API发送告警信息(开发中,需要开发者根据阿里云等短信,按需付费,同时申请短信签名)
- **钉钉告警**:通过钉钉机器人发送消息,支持@指定人员或全体成员
### 3. 完善的日志记录
- 使用NLog进行详细的日志记录
- 记录进程状态变更、重启尝试和告警发送情况
- 支持将进程状态信息记录到数据库(MySQL/SQL Server)
### 4. 灵活的配置管理
- 通过独立的JSON配置文件管理监控的进程列表
- 支持在配置中设置进程路径、启动参数、自动重启策略等
- 监控间隔时间可自定义设置
## 技术架构
### 技术栈
- **开发语言**:C#
- **运行环境**:.NET Framework 4.8
- **日志框架**:NLog
- **JSON处理**:Newtonsoft.Json
- **数据访问**:SqlSugar(支持MySQL和SQL Server)
- **部署形式**:Windows服务
### 核心类与功能模块
1. **Service1**:Windows服务主类,负责服务生命周期管理和定时任务调度
2. **ProcessInfoDto**:进程信息数据传输对象,定义了进程监控所需的各项配置
3. **ConfigHelper**:配置管理辅助类,用于读取应用程序配置
4. **DingTalkRobot**:钉钉机器人通信类,实现钉钉消息发送功能
## 安装部署
### 环境要求
- Windows操作系统
- .NET Framework 4.8(根据项目编译版本要求)
### 安装步骤
1. **编译项目**
- 使用Visual Studio打开`WinSupervisor守护进程服务.sln`解决方案
- 编译生成Release版本的可执行文件
2. **安装Windows服务**
- 以管理员身份运行命令提示符
- 执行安装命令:
```
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe [生成目录]\Yywl.CqytSvc.exe
```
- 或直接运行项目中的`install安装服务命令.bat`(需要先修改脚本中的路径)
3. **启动服务**
- 在Windows服务管理器中找到"WinSupervisor守护进程服务"
- 右键点击并选择"启动"
4. **验证服务运行状态**
- 检查服务是否正常运行
- 查看日志文件确认监控任务已开始执行
### 卸载服务
- 以管理员身份运行命令提示符
- 执行卸载命令:
```
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe /u [生成目录]\Yywl.CqytSvc.exe
```
## 配置说明
### 1. 进程配置(ProcessConfig.json)
服务启动时会从应用程序目录下的`ProcessConfig.json`文件读取监控进程配置。配置格式如下:
```json
[
{
"ProcessName": "nginx.exe",
"ProcessPath": "C:\\iis_web\\nginx-1.22.1\\runNginx.bat",
"AutoRestart": true,
"StartArguments": "",
"MaxRestartCount": 0,
"RestartIntervalMs": 0
},
{
"ProcessName": "QQ.exe",
"ProcessPath": "C:\\Program Files\\Tencent\\QQ\\Bin\\QQ.exe",
"AutoRestart": true,
"StartArguments": "",
"MaxRestartCount": 5,
"RestartIntervalMs": 10000
}
]
```
配置项说明:
- `ProcessName`:进程名称(不含.exe后缀)
- `ProcessPath`:进程可执行文件的完整路径
- `AutoRestart`:是否自动重启(true/false)
- `StartArguments`:启动参数
- `MaxRestartCount`:最大重启次数限制(0表示无限制)
- `RestartIntervalMs`:重启间隔时间(毫秒)
### 2. 应用程序配置(App.config)
其他系统配置通过应用程序配置文件管理,主要包括:
#### 监控设置
```xml
```
#### 邮件告警配置
```xml
```
#### 短信告警配置
```xml
```
#### 钉钉告警配置
```xml
```
## 使用示例
### 监控Web服务器进程
例如,监控Nginx服务器进程:
1. 在`ProcessConfig.json`中添加配置:
```json
{
"ProcessName": "nginx",
"ProcessPath": "C:\\nginx\\nginx.exe",
"AutoRestart": true,
"StartArguments": "",
"MaxRestartCount": 3,
"RestartIntervalMs": 5000
}
```
2. 配置邮件告警:
设置`EnableEmailAlert`为`true`,并配置SMTP服务器信息。
3. 重启服务使配置生效
### 高级配置示例
对于需要特殊启动参数的应用程序:
```json
{
"ProcessName": "myapp",
"ProcessPath": "C:\\Apps\\MyApp\\MyApp.exe",
"AutoRestart": true,
"StartArguments": "--config=app.config --port=8080",
"MaxRestartCount": 0,
"RestartIntervalMs": 0
}
```
## 日志查看
服务会在应用程序目录下的`logs`文件夹中生成日志文件,可以通过日志文件查看:
- 服务运行状态
- 进程监控记录
- 告警发送情况
- 错误信息
## 常见问题
### 1. 服务无法启动
- 检查是否以管理员身份运行安装命令
- 确认.NET Framework版本兼容性
- 查看Windows事件日志获取详细错误信息
### 2. 进程无法自动重启
- 检查`ProcessPath`是否正确
- 确认服务账户是否有足够权限启动进程
- 检查`AutoRestart`配置是否设为`true`
### 3. 告警通知未收到
- 验证告警功能是否启用(`EnableEmailAlert`等设置)
- 检查告警服务器配置是否正确
- 查看日志文件中的告警发送记录和错误信息
## 注意事项
1. 首次安装后,请确保`ProcessConfig.json`文件存在且格式正确
2. 敏感信息(如SMTP密码、钉钉Webhook地址)应妥善保管
3. 建议定期检查日志文件,确保服务正常运行
4. 对于关键系统,建议配置多种告警方式以提高可靠性
## 许可证
[免费使用,如需二次开发可以直接fork项目,并在项目中添加说明]
## 联系信息
如有问题或建议,请联系:[作者/团队联系方式:867928135@qq.com]