ProcessExts.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Collections.Generic;
  2. using System.Diagnostics;
  3. using System.Reflection;
  4. namespace DaJiaoYan.Utils
  5. {
  6. internal class ProcessExts
  7. {
  8. public static Process RunningInstance(ref Process target)
  9. {
  10. Process result = null;
  11. Process[] processes = Process.GetProcessesByName(target.ProcessName);
  12. //遍历与当前进程名称相同的进程列表
  13. foreach (Process process in processes)
  14. {
  15. //如果实例已经存在则忽略当前进程
  16. if (process.Id != target.Id)
  17. {
  18. //保证要打开的进程同已经存在的进程来自同一文件路径
  19. if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\").Equals(target.MainModule.FileName))
  20. {
  21. //返回已经存在的进程
  22. result = process;
  23. break;
  24. }
  25. }
  26. }
  27. return result;
  28. }
  29. /// <summary>
  30. /// 获取运行的
  31. /// </summary>
  32. /// <param name="filename"></param>
  33. /// <returns></returns>
  34. public static Process RunningInstance(string filename)
  35. {
  36. Process result = null;
  37. filename = filename.Replace("/", "\\");
  38. Process[] processes = Process.GetProcesses();
  39. foreach (Process process in processes)
  40. {
  41. try
  42. {
  43. if (process != null && process.MainModule != null && process.MainModule.FileName.Replace("/", "\\").Equals(filename))
  44. {
  45. result = process;
  46. break;
  47. }
  48. }
  49. catch
  50. {
  51. }
  52. }
  53. return result;
  54. }
  55. public static List<Process> GetSubProcess(string parentName)
  56. {
  57. List<Process> result = new List<Process>();
  58. Process[] processes = Process.GetProcesses();
  59. int i = 0;
  60. foreach (Process process in processes)
  61. {
  62. try
  63. {
  64. Utils.Log.WriteLine($"{++i}: {process.MainModule.ModuleName} / {process.MainModule.FileName}");
  65. //if (process != null && process.MainModule != null && process.MainModule.ModuleName.FileName.Replace("/", "\\").Equals(filename))
  66. //{
  67. // result.Add(process);
  68. // break;
  69. //}
  70. }
  71. catch
  72. {
  73. }
  74. }
  75. return result;
  76. }
  77. /// <summary>
  78. /// 启动升级程序
  79. /// </summary>
  80. public static void RunUpdate()
  81. {
  82. Process.Start(Variables.Const.UPDATE_EXEC_FILENAME);
  83. }
  84. }
  85. }