SystemHelper.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Management;
  5. using Vinno.FIS.Sonopost.Features.Oled;
  6. using Vinno.FIS.Sonopost.Managers;
  7. using Vinno.FIS.Sonopost.Managers.Interfaces;
  8. using Vinno.IUS.Common.Log;
  9. namespace Vinno.FIS.Sonopost.Helpers
  10. {
  11. public class SystemHelper
  12. {
  13. private const string BackupFileName = "Flyinsono_SonoPost_";
  14. private const string BackupFolderPath = @"C:\SonopostBackup";
  15. /// <summary>
  16. /// 系统还原
  17. /// </summary>
  18. public static void RestoreSystem()
  19. {
  20. try
  21. {
  22. ManagementPath path = new ManagementPath(@"\\.\root\default:SystemRestore");
  23. ManagementClass mc = new ManagementClass(path);
  24. var oledManager = AppManager.Instance.GetManager<IOledManager>();
  25. foreach (ManagementBaseObject item in mc.GetInstances())
  26. {
  27. //CreationTime 创建时间
  28. var creationTime = item.GetPropertyValue("CreationTime");
  29. //Description 还原点名称(描述)
  30. var description = item.GetPropertyValue("Description").ToString();
  31. //EventType 默认:100
  32. var eventType = item.GetPropertyValue("EventType");
  33. //RestorePointType 值定义:16(手动),18(关键更新),0(安装),1(应用卸载),10(安装驱动),12(控制面板添加删除)
  34. var restorePointType = item.GetPropertyValue("RestorePointType");
  35. //SequenceNumber
  36. var sequenceNumber = item.GetPropertyValue("SequenceNumber");
  37. Logger.WriteLineInfo($"CreateTime:{creationTime} Desctiption:{description} EventType:{eventType} RestorePointType:{restorePointType} SequenceNum:{sequenceNumber}");
  38. if (description == "SonopostInstall")
  39. {
  40. Logger.WriteLineInfo("Start Restore!");
  41. var result = mc.InvokeMethod("Restore", new object[] { sequenceNumber });
  42. if (int.Parse(result.ToString()) == 0)
  43. {
  44. Logger.WriteLineInfo($"Restore State :{result}");
  45. RebootSystem();
  46. }
  47. else
  48. {
  49. Logger.WriteLineInfo($"Restore Error State :{result}");
  50. oledManager.ShowStatus(OledMessage.Error);
  51. }
  52. return;
  53. }
  54. }
  55. Logger.WriteLineInfo($"Restore Error:Didn't find the backUp file.");
  56. oledManager.ShowStatus(OledMessage.Error);
  57. }
  58. catch (Exception e)
  59. {
  60. Logger.WriteLineError($"ResetSystem Error:{e}");
  61. }
  62. }
  63. /// <summary>
  64. /// 系统还原
  65. /// </summary>
  66. public static void ResetSystem()
  67. {
  68. var oledManager = AppManager.Instance.GetManager<IOledManager>();
  69. try
  70. {
  71. if (!Directory.Exists(BackupFolderPath))
  72. {
  73. Logger.WriteLineError($"ResetSystem Error:Backup Folder is Missing:{BackupFolderPath}");
  74. oledManager.ShowStatus(OledMessage.Error);
  75. return;
  76. }
  77. var backupFile = Directory.GetFiles(BackupFolderPath, BackupFileName + "*.zip", SearchOption.TopDirectoryOnly).FirstOrDefault();
  78. if (backupFile == null)
  79. {
  80. Logger.WriteLineError($"ResetSystem Error:Backup File is Missing");
  81. oledManager.ShowStatus(OledMessage.Error);
  82. return;
  83. }
  84. else
  85. {
  86. Logger.WriteLineError($"Backup File Found:{backupFile}");
  87. UpgradeHelper.StartUpgrade(backupFile, true, true);
  88. }
  89. }
  90. catch (Exception e)
  91. {
  92. Logger.WriteLineError($"ResetSystem Error:{e}");
  93. oledManager.ShowStatus(OledMessage.Error);
  94. }
  95. }
  96. /// <summary>
  97. /// 重启操作系统
  98. /// </summary>
  99. public static void RebootSystem()
  100. {
  101. try
  102. {
  103. ConnectionOptions options = new ConnectionOptions();
  104. options.EnablePrivileges = true;
  105. ManagementScope scope = new ManagementScope(@"\\.\root\cimv2", options);
  106. scope.Connect();
  107. //Query system for Operating System information
  108. ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
  109. ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
  110. foreach (ManagementObject m in searcher.Get())
  111. {
  112. // reboot system
  113. uint ret = (uint)m.InvokeMethod("Reboot", null);
  114. if (ret != 0)
  115. {
  116. Logger.WriteLineError("Reboot System Error!");
  117. }
  118. }
  119. }
  120. catch (Exception e)
  121. {
  122. Logger.WriteLineError($"Reboot System Error:{e}");
  123. }
  124. }
  125. /// <summary>
  126. /// get disk free space, unit GB
  127. /// </summary>
  128. /// <param name="path"></param>
  129. /// <returns></returns>
  130. public static long GetHardDiskFreeSpace(string path)
  131. {
  132. long totalSize = 0;
  133. var rootPath = Path.GetPathRoot(path);
  134. DriveInfo[] drives = DriveInfo.GetDrives();
  135. foreach (DriveInfo drive in drives)
  136. {
  137. if (drive.Name == rootPath)
  138. {
  139. totalSize = drive.TotalFreeSpace / (1024 * 1024 * 1024);
  140. break;
  141. }
  142. }
  143. return totalSize;
  144. }
  145. }
  146. }