AppLaunchTool.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //************************************************************************
  2. // https://github.com/yuzhengyang
  3. // author: yuzhengyang
  4. // date: 2017.10.12 - 2017.10.12
  5. // desc: 客户端启动器
  6. // Copyright (c) yuzhengyang. All rights reserved.
  7. //************************************************************************
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Text;
  13. using Y.Utils.DataUtils.Collections;
  14. using Y.Utils.DataUtils.StringUtils;
  15. using Y.Utils.IOUtils.FileUtils;
  16. using Y.Utils.IOUtils.PathUtils;
  17. using Y.Utils.WindowsUtils.ProcessUtils;
  18. namespace Y.Utils.AppUtils
  19. {
  20. public static class AppLaunchTool
  21. {
  22. /// <summary>
  23. /// 启动最新版本程序
  24. /// </summary>
  25. /// <param name="route">路径:程序版本文件夹路径</param>
  26. /// <param name="startfilename">可执行文件名</param>
  27. /// <returns></returns>
  28. public static bool StartNewVersion(string route, string startfilename)
  29. {
  30. //判断路径是文件还是文件夹,并统一处理为文件夹
  31. string appPath = route;
  32. if (FileTool.IsFile(route))
  33. appPath = DirTool.GetFilePath(route);
  34. if (Directory.Exists(appPath))
  35. {
  36. //获取运行目录下所有文件
  37. List<string> paths = DirTool.GetPath(appPath);
  38. if (ListTool.HasElements(paths))
  39. {
  40. //解析属于版本号的文件
  41. Version version = null;
  42. string startfile = null;
  43. foreach (var path in paths)
  44. {
  45. //只解析文件名带三个点的文件夹
  46. string filename = Path.GetFileName(path);
  47. if (StringTool.SubStringCount(filename, ".") == 3)
  48. {
  49. try
  50. {
  51. Version tempVersion = new Version(filename);
  52. string tempFile = DirTool.Combine(path, startfilename);
  53. if ((version == null || tempVersion > version) && File.Exists(tempFile))
  54. {
  55. version = tempVersion;
  56. startfile = tempFile;
  57. }
  58. }
  59. catch { }
  60. }
  61. }
  62. //准备启动
  63. if (startfile != null)
  64. {
  65. return ProcessTool.Start(startfile);
  66. }
  67. }
  68. }
  69. return false;
  70. }
  71. /// <summary>
  72. /// 查询是否有最新版本程序可以执行
  73. /// </summary>
  74. /// <param name="route">路径:程序版本文件夹路径</param>
  75. /// <param name="startfilename">可执行文件名</param>
  76. /// <returns></returns>
  77. public static bool HasNewVersion(string route, string startfilename)
  78. {
  79. //判断路径是文件还是文件夹,并统一处理为文件夹
  80. string appPath = route;
  81. if (FileTool.IsFile(route))
  82. appPath = DirTool.GetFilePath(route);
  83. if (Directory.Exists(appPath))
  84. {
  85. //获取运行目录下所有文件
  86. List<string> paths = DirTool.GetPath(appPath);
  87. if (ListTool.HasElements(paths))
  88. {
  89. //解析属于版本号的文件
  90. foreach (var path in paths)
  91. {
  92. //只解析文件名带三个点的文件夹
  93. string filename = Path.GetFileName(path);
  94. if (StringTool.SubStringCount(filename, ".") == 3)
  95. {
  96. try
  97. {
  98. //有版本命名的文件,且文件中有exe程序
  99. Version tempVersion = new Version(filename);
  100. string tempFile = DirTool.Combine(path, startfilename);
  101. if (File.Exists(tempFile)) return true;
  102. }
  103. catch { }
  104. }
  105. }
  106. }
  107. }
  108. return false;
  109. }
  110. /// <summary>
  111. /// 获取最新版本号
  112. /// </summary>
  113. /// <param name="route">路径:程序版本文件夹路径</param>
  114. /// <param name="startfilename">可执行文件名</param>
  115. /// <returns></returns>
  116. public static Version GetNewVersion(string route, string startfilename)
  117. {
  118. //解析属于版本号的文件
  119. Version version = null;
  120. string startfile = null;
  121. //判断路径是文件还是文件夹,并统一处理为文件夹
  122. string appPath = route;
  123. if (FileTool.IsFile(route))
  124. appPath = DirTool.GetFilePath(route);
  125. if (Directory.Exists(appPath))
  126. {
  127. //获取运行目录下所有文件
  128. List<string> paths = DirTool.GetPath(appPath);
  129. if (ListTool.HasElements(paths))
  130. {
  131. foreach (var path in paths)
  132. {
  133. //只解析文件名带三个点的文件夹
  134. string filename = Path.GetFileName(path);
  135. if (StringTool.SubStringCount(filename, ".") == 3)
  136. {
  137. try
  138. {
  139. Version tempVersion = new Version(filename);
  140. string tempFile = DirTool.Combine(path, startfilename);
  141. if ((version == null || tempVersion > version) && File.Exists(tempFile))
  142. {
  143. version = tempVersion;
  144. startfile = tempFile;
  145. }
  146. }
  147. catch { }
  148. }
  149. }
  150. }
  151. }
  152. return version;
  153. }
  154. }
  155. }