You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写C#程序检测RDP(mstsc进程)运行状态并发送邮件通知?

检测mstsc进程并触发邮件通知的实现

要实现持续检测RDP客户端(mstsc.exe)是否运行、进程停止时发送邮件告警的功能,重点需要修正进程检测的逻辑漏洞,并加入持续检测机制。以下是完善后的代码实现:

using System.Diagnostics;
using System.Net.Mail;
using System.Net;
using System.Threading;

// 邮件配置
var发件人邮箱 = "name@mail.com";
var收件人邮箱 = "name2@mail2.com";
var邮件主题 = "RDP客户端已停止运行告警";
var邮件内容 = "检测到mstsc进程已退出,请及时处理";

// 邮件服务器参数
var邮箱用户名 = "mailserver@mail.com"; // 从邮件服务商获取
var邮箱密码 = "password"; // 从邮件服务商获取
var邮件服务器地址 = "mailserver";
var邮件服务器端口 = 587; // 根据服务商实际端口调整,如465/587

// 初始化SMTP客户端
var smtp客户端 = new SmtpClient(邮件服务器地址, 邮件服务器端口)
{
    Credentials = new NetworkCredential(邮箱用户名, 邮箱密码),
    EnableSsl = true // 多数服务商要求开启SSL,按需调整
};

// 标记上次检测状态,避免重复发邮件
bool上次检测到进程存在 = true;

// 持续检测循环
while (true)
{
    // 获取所有运行中的mstsc进程
    Process[] mstsc进程列表 = Process.GetProcessesByName("mstsc");
    bool当前进程存在 = mstsc进程列表.Length > 0;

    // 仅当进程从存在变为不存在时发送告警
    if (上次检测到进程存在 && !当前进程存在)
    {
        try
        {
            smtp客户端.Send(发件人邮箱, 收件人邮箱, 邮件主题, 邮件内容);
            Console.WriteLine("告警邮件已发送");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发送邮件失败:{ex.Message}");
        }
    }

    // 更新检测状态
    上次检测到进程存在 = 当前进程存在;

    // 每隔30秒检测一次,可自行调整间隔
    Thread.Sleep(30000);
}

关键要点说明

  • 进程检测逻辑:Process.GetProcessesByName("mstsc")返回所有运行中的mstsc进程数组,通过判断数组长度是否大于0确定进程状态。原代码直接取processes[0]会在进程不存在时抛出索引越界异常,必须先做长度判断。
  • 持续检测机制:用while(true)实现无限循环,配合Thread.Sleep()控制检测间隔,避免高频检测占用过多CPU资源。
  • 避免重复告警:通过状态标记上次检测到进程存在,仅在进程状态从“存在”变为“不存在”时发送邮件,防止短时间内重复发送大量告警。
  • 邮件配置注意:根据你的邮件服务商调整EnableSsl、端口号等参数,例如QQ邮箱端口为465,Gmail为587,且需开启SSL。

内容的提问来源于stack exchange,提问作者SimK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:45:52