用C#写一个实现进程监控的自动关机工具

简介: 今天QA部门需要进行Performance测试,因为跑job的时间会很长,下班也跑不完。所以想要做一个job运行完毕自动关机的工具。 原理就是检查进程的名称,如果检查不到相应的进程,就说明job已经跑完了,可以关机了。

今天QA部门需要进行Performance测试,因为跑job的时间会很长,下班也跑不完。所以想要做一个job运行完毕自动关机的工具。

原理就是检查进程的名称,如果检查不到相应的进程,就说明job已经跑完了,可以关机了。

下图是我做的自动关机工具,选择相应的进程名(这里选择job的进程名),点击OK之后窗体会隐藏,在后台监控进程状态:

程序实例只能运行一个,禁止多个实例同时运行,如果后台已经存在实例,再点击打开工具会提示:

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace AutoShutDown
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            //MessageBox.Show(Process.GetCurrentProcess().ProcessName.ToString());
            //Only one instance can run at the same time.
            Process[] tylan = Process.GetProcessesByName("AutoShutDown");
            if (tylan.Count() > 1)
            {
                MessageBox.Show("Sorry, the instance of this program has already run on this computer. You can not run it again.");
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            }
            InitializeComponent();
            AddProcesses();
        }

        private void AddProcesses()
        {
            var processes = System.Diagnostics.Process.GetProcesses();
            foreach (var process in processes) 
            {
                Processes.Items.Add(process.ProcessName.ToString());
            }
        }

        private void Processes_SelectedIndexChanged(object sender, EventArgs e)
        {
            Processes.Text = Processes.SelectedItem.ToString();
        }

        private void OKButton_Click(object sender, EventArgs e)
        {
            //Check if the process has been selected.
            if (Processes.Text == "")
            {
                MessageBox.Show("Please select a process first.");
            }
            else
            {
                //Check the process's status every 5 miniutes.
                System.Timers.Timer tmr = new System.Timers.Timer(5000);
                tmr.Elapsed += new System.Timers.ElapsedEventHandler(CheckProcess);
                tmr.AutoReset = true;
                tmr.Enabled = true;
                this.Hide();
            }
        }

        private void CheckProcess(object source, System.Timers.ElapsedEventArgs e) 
        {
            int numOfTheProcesses = 0;
            var processes = System.Diagnostics.Process.GetProcesses();
            foreach (var process in processes) 
            {
                string TheProcessName = "";
                if (Processes.InvokeRequired)
                {
                    Processes.Invoke(new MethodInvoker(delegate { TheProcessName = Processes.Text; }));
                }
                if (process.ProcessName == TheProcessName)
                {
                    //Find the objective process.
                    //MessageBox.Show(TheProcessName);
                    numOfTheProcesses++;
                }
            }
            if (numOfTheProcesses == 0) 
            {
                //No such process, shut down the computer.
                MessageBox.Show("The computer is ready to be shut down.");
                //Shut down the comp
                System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
                myProcess.StartInfo.FileName = "cmd.exe";
                myProcess.StartInfo.UseShellExecute = false;
                myProcess.StartInfo.RedirectStandardInput = true;
                myProcess.StartInfo.RedirectStandardOutput = true;
                myProcess.StartInfo.RedirectStandardError = true;
                myProcess.StartInfo.CreateNoWindow = true;
                myProcess.Start();
                myProcess.StandardInput.WriteLine("shutdown -s -t 0"); 
            }
        }
    }
}

其中橘黄色字体部分为关机代码,红色字体部分为每五秒钟执行一次ChecProcess方法,每五秒检查一次进程是否存在,如果不存在了,就关机。

 

相关文章
|
6月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
129 13
|
3月前
|
监控
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
|
2月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
66 0
|
2月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
65 0
|
3月前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
46 1
|
2月前
|
SQL JSON BI
最好的 C# .NET 报告工具
最好的 C# .NET 报告工具
42 0
|
3月前
|
消息中间件 网络协议 Python
工具人逆袭!掌握Python IPC,让你的进程从此告别单打独斗
【9月更文挑战第9天】你是否曾遇到多个Python程序像孤岛般无法通信,导致数据孤立、任务难协同的问题?掌握进程间通信(IPC)技术,可助你打破这一僵局。IPC是不同进程间传递数据或信号的机制,在Python中常用的方法有管道、消息队列、共享内存及套接字等。其中,管道适用于父子或兄弟进程间简单数据传递;套接字则不仅限于本地,还能在网络间实现复杂的数据交换。通过学习IPC,你将能设计更健壮灵活的系统架构,成为真正的编程高手。
26 3
|
4月前
|
数据采集 监控 API
如何监控一个程序的运行情况,然后视情况将进程杀死并重启
这篇文章介绍了如何使用Python的psutil和subprocess库监控程序运行情况,并在程序异常时自动重启,包括多进程通信和使用日志文件进行断点重续的方法。
|
3月前
|
SQL 网络协议 数据库连接
已解决:连接SqlServer出现 provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程【C#连接SqlServer踩坑记录】
本文介绍了解决连接SqlServer时出现“provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程”错误的步骤,包括更改服务器验证模式、修改sa用户设置、启用TCP/IP协议,以及检查数据库连接语句中的实例名是否正确。此外,还解释了实例名mssqlserver和sqlserver之间的区别,包括它们在默认设置、功能和用途上的差异。
|
4月前
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
118 19

热门文章

最新文章

相关实验场景

更多
下一篇
无影云桌面