123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- using System.Diagnostics;
- using System.Text;
- using System.Text.Json;
- namespace IES.ExamServer.Helpers
- {
- public class ProcessHelper
- {
- public static (int code, string msg) ExecuteProcess( string pathBat )
- {
- int code = 0;
- string msg = string.Empty;
- try {
- // 创建一个新的 ProcessStartInfo 对象
- ProcessStartInfo startInfo = new ProcessStartInfo
- {
- // 指定要执行的 BAT 文件的路径
- FileName = "cmd.exe",
- // 设置命令行参数,使用 /c 表示执行命令后关闭命令提示符窗口
- Arguments = $"/c \"{pathBat}\"", // 用双引号括起路径
- // 设置是否使用操作系统 shell 启动进程
- UseShellExecute = false,
- // 设置是否创建新的窗口
- CreateNoWindow = true,
- // 重定向标准输出和标准错误输出
- RedirectStandardOutput = true,
- RedirectStandardError = true
- };
- // 创建一个新的 Process 对象
- using (Process process = new Process())
- {
- // 将 ProcessStartInfo 对象分配给 Process 对象
- process.StartInfo = startInfo;
- process.StartInfo.StandardOutputEncoding = Encoding.UTF8;
- process.StartInfo.StandardErrorEncoding = Encoding.UTF8;
- // 启动进程
- process.Start();
- // 读取标准输出和标准错误输出
- string output = process.StandardOutput.ReadToEnd();
- string error = process.StandardError.ReadToEnd();
- // 等待进程执行完成
- process.WaitForExit();
- // 输出执行结果
- if (!string.IsNullOrEmpty(output))
- {
- // Console.WriteLine("标准输出:");
- // Console.WriteLine(output);
- if (output.Contains("successfully", StringComparison.OrdinalIgnoreCase))
- {
- msg = $"执行成功!";
- code = 200;
- }
- else
- {
- msg = $"执行异常:{output}";
- code = 1;
- }
- }
- if (!string.IsNullOrEmpty(error))
- {
- // Console.WriteLine("错误输出:");
- // Console.WriteLine(error);
- msg = $"执行失败:{error}";
- code = 2;
- }
- }
- } catch (Exception ex) {
- code = 500;
- msg = $"{ex.Message},{ex.StackTrace}";
- }
- return (code, msg);
- }
- /// <summary>
- /// 获取所有名为 "conhost.exe" 的进程
- /// </summary>
- public static void CloseConhost()
- {
- Process[] conhostProcesses = Process.GetProcessesByName("conhost");
-
- var CurrentProcess = Process.GetCurrentProcess();
- var stime = CurrentProcess.StartTime;
-
- if (conhostProcesses.Length == 0)
- {
- //Console.WriteLine("没有找到 conhost.exe 进程。");
- return;
- }
- // 遍历并关闭每个 conhost.exe 进程
- foreach (Process process in conhostProcesses)
- {
- TimeSpan difference = stime- process.StartTime ;
- if (CurrentProcess.ProcessName.Equals(process.ProcessName))
- {
- if (difference.Seconds>10)
- {
- continue;
- }
- try
- {
- // 关闭进程
- process.Kill();
- //Console.WriteLine($"已关闭进程 ID: {process.Id},{process.MachineName},{process.ProcessName}");
- }
- catch (Exception ex)
- {
- //Console.WriteLine($"无法关闭进程 ID: {process.Id}, 错误: {ex.Message}");
- }
- }
- }
- //Console.WriteLine("操作完成。");
- }
- }
- }
|