C#实现定时检测软件运行状态

一、需求

windows程序,定时监测某软件是否启动状态,并通过redis发送监测数据。

二、开发前梳理

通过vs2019进行代码编写,使用隐藏的winform实现,定时任务通过.net自带的System.Timers工具,redis工具使用ServiceStack.Redis,任务主要通过System.Diagnostics

工具获取程序进程,并定时获取其状态,最后使用wix打包工具,将程序打包程MSI,以供客户机安装。安装后自启,并且程序需要可以实现开机自启,通过添加RegistryKey注册表实现。

三、实现

首先新建一个winform程序,向窗体中添加notifyicon和contextmenustrip,这两个控件的组合是实现将程序运行时图标显示在任务栏里。可以选中notifyicon1在右侧属性栏的Icon属性添加显示图标,也可以在代码中添加,后面又需求根据被检测软件运行状态而变换图标颜色的需求,所以在代码中会有所体现。

单击选中contextMenuStrip1,添加一个按钮“退出”,用来执行退出程序操作。

单击选中退出按钮,在右侧属性栏的事件属性列表中添加clicks事件

至此,简单的winform前端完成,接下来实现代码部分。

转到窗体的代码部分,

    public partial class IconForm : Form
    {
        public IconForm()
        {
            InitializeComponent();
        }
        //log4n用于输出打印日志
        ILog _log = LogManager.GetLogger(typeof(IconForm));
        //服务程序的主体类
        CheckService checkService = new CheckService();
        //程序任务栏托管的显示图标
        string iconY = ConfigurationManager.AppSettings["IconY"].Trim();
        string iconN = ConfigurationManager.AppSettings["IconN"].Trim(); 
        bool check = false;//开机自启标志

        #region 窗体单例模式
        //使用单例模式是为了在后续改变显示图标时不新建窗体,而是同一个窗体
        public static IconForm instance;
        public static IconForm CreateForm()
        {
            if (instance == null || instance.IsDisposed)
            {
                instance = new IconForm();
            }
            return instance;
        }
        #endregion

        #region 载入
        private void IconForm_Load(object sender, EventArgs e)
        {
            //检查是否开机自启
            RegistryKey r_local = Registry.CurrentUser;
            RegistryKey r_run = r_local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false);
            if (r_run.GetValue("CheckService") == null)
            {
                check = true;
            }
            r_run.Close();
            r_local.Close();
            CheckedChanged(check);
            checkService.Start();
        }
        #endregion

        #region 画面及控件隐藏
        private void IconForm_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide(); //或者是this.Visible = false;
                this.notifyIcon1.Visible = true;
            }
        }
        #endregion

        #region 小图标右键退出按钮
        private void exitMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("您确定要退出程序吗?", "确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
            {
                notifyIcon1.Visible = false;
                checkService.Stop();
                this.Close();
                this.Dispose();
                Applicati
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值