ProcessHelper.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /**
  2. *┌──────────────────────────────────────────────────────────────┐
  3. *│ 描 述:进程相关的工具类
  4. *│ 作 者:执笔小白
  5. *│ 版 本:1.2
  6. *│ 创建时间:2022-10-13 10:40:56
  7. *└──────────────────────────────────────────────────────────────┘
  8. *┌──────────────────────────────────────────────────────────────┐
  9. *│ 命名空间: Common
  10. *│ 类 名:ProcessHelper
  11. *└──────────────────────────────────────────────────────────────┘
  12. */
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Diagnostics;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. namespace MainForm.ClassFile
  20. {
  21. public class ProcessHelper
  22. {
  23. /// <summary>
  24. /// 获取当前进程信息
  25. /// </summary>
  26. /// <returns></returns>
  27. public static Process GetCurrentProcess()
  28. {
  29. return Process.GetCurrentProcess();
  30. }
  31. /// <summary>
  32. /// 获取当前进程名
  33. /// </summary>
  34. /// <returns></returns>
  35. public static string GetCurrentProcessName()
  36. {
  37. return Process.GetCurrentProcess().ProcessName;
  38. }
  39. /// <summary>
  40. /// 开启进程By程序启动文件路径
  41. /// </summary>
  42. /// <param name="processName">进程名</param>
  43. /// <param name="workingDirectory">exe工作目录</param>
  44. /// <param name="useShellExecute">是否展示命令行</param>
  45. /// <param name="arguments">设置启动程序时使用的命令行自变量</param>
  46. /// <param name="windowStyle">启动时应用的窗口状态</param>
  47. public static Process StartProcess(string processPath, string workingDirectory = "", bool useShellExecute = true, string arguments = "", ProcessWindowStyle windowStyle = ProcessWindowStyle.Minimized)
  48. {
  49. ProcessStartInfo info = new ProcessStartInfo();
  50. info.FileName = processPath;
  51. if (!string.IsNullOrEmpty(workingDirectory))
  52. {
  53. info.WorkingDirectory = workingDirectory;
  54. info.CreateNoWindow = true;
  55. }
  56. info.UseShellExecute = useShellExecute;
  57. info.Arguments = arguments;
  58. info.WindowStyle = windowStyle;
  59. return Process.Start(info);
  60. }
  61. /// <summary>
  62. /// 检查进程是否存在
  63. /// </summary>
  64. /// <param name="processName">进程名</param>
  65. /// <returns></returns>
  66. public static bool CheckProcessActivityByProcessName(string processName)
  67. {
  68. var processList = Process.GetProcessesByName(processName);
  69. return (processList != null && processList.Count() > 0) ? true : false;
  70. }
  71. /// <summary>
  72. /// 正常关闭进程By进程名
  73. /// </summary>
  74. /// <param name="processName">进程名</param>
  75. public static void CloseProcess(string processName)
  76. {
  77. var processList = Process.GetProcessesByName(processName);
  78. foreach (Process process in processList)
  79. {
  80. try
  81. {
  82. if (!process.CloseMainWindow()) // 通知正常关闭
  83. {
  84. process.Kill(); // 强制结束
  85. process.WaitForExit(); // 等待退出完成
  86. }
  87. }
  88. catch { }
  89. }
  90. }
  91. /// <summary>
  92. /// 强制杀死进程By进程名
  93. /// </summary>
  94. /// <param name="processName">进程名</param>
  95. public static void KillProcess(string processName)
  96. {
  97. foreach (Process process in Process.GetProcessesByName(processName))
  98. {
  99. try
  100. {
  101. process.Kill(); // 强制结束
  102. process.WaitForExit(); // 等待退出完成
  103. }
  104. catch { }
  105. }
  106. }
  107. }
  108. }