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); } /// /// 获取所有名为 "conhost.exe" 的进程 /// 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("操作完成。"); } } }