AppLaunchTool.cs 6.4 KB

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