目录
设计初衷
开发运行环境
Craneoffice ProcessGC
运行主界面
管理任务与策略
其它设置
移动存储设备管理
核心代码-计时器监控
小结
设计初衷
在使用 COM 模式操作 OFFICE 组件的开发过程中,当操作完相关文档后,在某些情况下仍然无法释放掉 Word 或 EXCEL 等应用进程,因此根据进程活动情况或时间点范围开发了一个强制杀掉指定进程名称的 WinForm 程序,做为一种辅助工具运行在云服务器上,命名为 Craneoffice ProcessGC。
开发运行环境
操作系统: Windows Server 2019 DataCenter
.net版本: .netFramework4.0 或以上
开发工具:VS2019 C#
Craneoffice ProcessGC
该工具软件属绿色版,无须安装,直接运行 bin 目录下的 ProcessGC.exe 即可,同目录下的 ProcessList.txt 为配置文件,用于配置要释放的进程,后续也可用工具程序进行操作。
运行主界面
运行后的主界面如下图:
主界面显示了要回收的进程列表,源引于 ProcessList.txt 文件配置,如图示例我们可以看到欲回收的进程为EXCEL和WORD,下面则显示已被回收的进程(如果有的话)。
下方显示 CPU 的利用率和可用内存情况。
系统会随时监测指定的进程名,如果有则按指定的策略进行管理。
管理任务与策略
点击管理任务选项卡,显示如下图:
策略设置如下表:
序号 | 项 | 说明 |
---|---|---|
1 | 要添加回收的进程名 | 请正确添加,无须输入扩展名,如果不确定名称则可以通过任务管理器进行查看 |
2 | 管理策略 | 共分三种方式: 1、Force(默认值,表示符合条件则强制关闭) 2、CPU 3、Memory |
3 | 回收时间差(秒) | 以秒为单位,记录进程停止活动的时间,超过停止活动时间的进程将被回收 |
4 | 上限指标 | 1、上限指标不能小于零。 2、当选用的策略为CPU时,上限指标不能大于100(即最高100%占用率) 3、当选用的策略为Memory时,指定为Mb值,表示内存占用的最高上限 |
5 | 检测时间标准 | 共有两种方式: 1、ByProcess,以进程时间计算(默认) 2、ByNowTime,以启动当前时间计算 |
6 | 回收动作 | 共有两种方式: 1、Kill,直接关闭释放进程(默认) 2、Command,执行命令行操作 |
7 | 相关动作命令 | 当第6项回收动作为Command时,此项为必输入项,表示要执行的 WINDOWS 命令行操作 |
8 | 重新启用命令 | 设置此项,则当关闭或执行动作命令后,尝试执行此命令 |
9 | 计划强制关闭时间(小时) | 可以设定小时:分:秒(这个值前缀需要设置一个有效日期),代表每到此时此分此秒,则强制关闭进程 |
通过以上设置,我们可以灵活的对进程的关闭方式进行控制,以达到实际应用的目的。
其它设置
选择设置选项卡,如下图:
我们可设置窗口的透明度,另外可以设置两个选项:
1、只回收本程序启动时间以后的进程
2、只回收非激活窗口的进程, 指非操作系统显式的应用进程。
3、管理密码:默认值为111111,用于关闭应用程序等操作。
移动存储设备管理
这个选项如下图:
这是为移动设备存储数据库准备的一个选项,点击停止服务可以有效的、安全的移除存储设备,也可以继续启动服务。这个选项较少使用,也需要谨慎使用(因为它会尝试停止IIS、MS SQL SERVER 数据库服务等)。
核心代码-计时器监控
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { DateTime cur_now=System.DateTime.Now; int cur_hour=cur_now.Hour; int cur_min=cur_now.Minute; int cur_sec=cur_now.Second; pc.CategoryName="Processor"; pc.CounterName="% Processor Time"; pc.InstanceName="_Total"; // pc.MachineName="michaeljane"; float pcv=pc.NextValue(); label7.Text="CPU利用率:"+(pcv).ToString()+" %"; cpubar.Value=(int)(pcv); pcmem.CategoryName="Memory"; pcmem.CounterName="Available MBytes"; pcmem.InstanceName=null; // richTextBox1.Text=pcpu.NextValue().ToString()+"\r\n"; /* System.Diagnostics.PerformanceCounter[] mypc; System.Diagnostics.PerformanceCounterCategory mycat = new System.Diagnostics.PerformanceCounterCategory("process"); // Remove the current contents of the list. // Retrieve the counters. mypc = mycat.GetCounters(); // Add the retrieved counters to the list. richTextBox1.Text=""; for (int i = 0; i
还没有评论,来说两句吧...