/// <summary> /// Install AutoRearm and Setup Scheduled Task /// </summary> /// <param name="installPath">Path to write Program File</param> /// <param name="autoRearm">Byte Array representation of AutoRearm Program File</param> /// <returns>Output of Installation Process</returns> public static string InstallAutoRearm(string installPath, byte[] autoRearm) { using (StringWriter output = new StringWriter()) { LicenseList licenses = new LicenseListOffice(); // Show Activation Errors if No Licenses or Keys Exist if (licenses.GetListUnlicensed().Count == 0 && licenses.GetListLicensed().Count == 0) { output.WriteLine(LicenseErrorCode.ErrBroken); return(output.ToString()); } if (licenses.GetListUnlicensed().Count > 0 && licenses.GetListLicensed().Count == 0) { output.WriteLine(LicenseErrorCode.ErrKeyless); return(output.ToString()); } // Get Rearm Count try { int rearmCount = RearmOffice.GetRearmCount(); if (rearmCount < 1) { output.Write("You must have at least 1 available rearm to use this tool." + Environment.NewLine + "You have " + rearmCount + " rearms."); return(output.ToString()); } output.WriteLine("You have " + rearmCount + " rearms."); } catch (Exception) { output.Write("Failed to check rearm count. AutoRearm cannot be installed"); return(output.ToString()); } // Create Program File try { try { AutoRearmInstallPath = installPath; // Create Windows Defender Exclusion if (OSVersion.GetWindowsNumber() >= 10.0) { CommonUtilities.ExecuteCommand("powershell.exe Add-MpPreference -ExclusionPath " + CommonUtilities.EscapePath(AutoRearmInstallPath) + " -Force", true); } // Create AutoRearm CommonUtilities.FileCreate(AutoRearmFileName, autoRearm, AutoRearmInstallPath); output.WriteLine("Created " + AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); } catch (Exception) { AutoRearmInstallPath = Environment.GetEnvironmentVariable("windir") + Path.DirectorySeparatorChar + AutoRearmProcessName; output.WriteLine("Could not access AutoRearm path set in Settings, using default installation path."); CommonUtilities.FileCreate(AutoRearmFileName, autoRearm, AutoRearmInstallPath); output.WriteLine("Created " + AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); } } catch (Exception) { // Remove Windows Defender Exclusion if (OSVersion.GetWindowsNumber() >= 10.0) { CommonUtilities.ExecuteCommand("powershell.exe Remove-MpPreference -ExclusionPath " + CommonUtilities.EscapePath(AutoRearmInstallPath) + " -Force", true); } output.WriteLine("Failed to create " + AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); output.Write("AutoRearm failed to install!"); return(output.ToString()); } // Create Scheduled Tasks try { MakeAutoRearmNormalTask(); output.WriteLine("Created AutoRearm Scheduled Tasks"); } catch (Exception ex) { output.WriteLine("Failed to create AutoRearm Scheduled Tasks"); output.WriteLine(ex.Message); output.WriteLine("Cleaning up as AutoRearm is partially installed"); // Delete Program File try { CommonUtilities.FileDelete(AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); output.WriteLine("Deleted " + AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); } catch (Exception) { output.WriteLine("Failed to delete " + AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); } // Remove Windows Defender Exclusion if (OSVersion.GetWindowsNumber() >= 10.0) { CommonUtilities.ExecuteCommand("powershell.exe Remove-MpPreference -ExclusionPath " + CommonUtilities.EscapePath(AutoRearmInstallPath) + " -Force", true); } output.Write("AutoRearm failed to install!"); return(output.ToString()); } // Make License Backup try { LicenseBackup.Backup("AutoRearmBackup", AutoRearmInstallPath + "\\Backups\\" + OfficeVersion.GetOfficeName() + Path.DirectorySeparatorChar, licenses); output.WriteLine("Created License Backup Of Current Configuration"); } catch (Exception) { output.WriteLine("Failed to create License Backup Of Current Configuration"); output.WriteLine("Cleaning up as AutoRearm is partially installed"); // Delete Program File try { CommonUtilities.FileDelete(AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); output.WriteLine("Deleted " + AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); } catch (Exception) { output.WriteLine("Failed to delete " + AutoRearmInstallPath + Path.DirectorySeparatorChar + AutoRearmFileName); } // Delete Scheduled Tasks try { DeleteAutoRearmNormalTask(); output.WriteLine("Deleted AutoRearm Scheduled Tasks"); } catch (Exception) { output.WriteLine("Failed to delete AutoRearm Scheduled Tasks"); } // Remove Windows Defender Exclusion if (OSVersion.GetWindowsNumber() >= 10.0) { CommonUtilities.ExecuteCommand("powershell.exe Remove-MpPreference -ExclusionPath " + CommonUtilities.EscapePath(AutoRearmInstallPath) + " -Force", true); } output.Write("AutoRearm failed to install!"); return(output.ToString()); } output.Write("AutoRearm was succesfully installed."); return(output.ToString()); } }
/// <summary> /// Launch AutoRearm /// </summary> public void RunAutoRearm() { // Start Logging string logPath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + AutoRearmInstaller.AutoRearmInstaller.AutoRearmLogFileName; // Delete Log if Greater than 10MB FileInfo logFile = new FileInfo(logPath); if (logFile.Exists && logFile.Length >= 10485760) { CommonUtilities.FileDelete(logPath); } // Access Log using (_log = new StreamWriter(logPath, true)) { // Get Lowest Grace Period if (OfficeVersion.IsOfficeSupported()) { // Rearm if we only have 5 days left LicenseList licenses = new LicenseListOffice(); if (RearmBase.LowestGraceDays(licenses) < 6) { // Get the Program File Version FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetEntryAssembly().Location); WriteLine("------------------------------------" + Environment.NewLine + "AutoRearm " + myFileVersionInfo.FileVersion + " Ran At " + DateTime.Now + "."); // Rearm if Possible, Restore Backup if Rearm Fails WriteLine("Rearming Office because grace period is almost expired."); if (RearmOffice.Rearm().Contains("failed")) { WriteLine("Failed to Rearm. Restoring License Backup."); string restoreoutput = LicenseBackup.RestoreOfficeTrustedStore("AutoRearmBackup", Environment.CurrentDirectory + "\\Backups\\" + OfficeVersion.GetOfficeName() + Path.DirectorySeparatorChar); if (restoreoutput.Contains("Failed") == false) { WriteLine("Successfully Restored License Backup. Rearming Office."); // Wait and Cycle OSPPSVC Services.StopOSPPSVC(); Thread.Sleep(2000); Services.StartOSPPSVC(); Thread.Sleep(2000); if (RearmOffice.Rearm().Contains("failed")) { WriteLine("Failed to Rearm."); } else { WriteLine("Successfully Rearmed."); } } } else { WriteLine("Successfully Rearmed."); } } } else { WriteLine("Office Is Not Installed!"); } } // Remake AutoRearm Tasks AutoRearmInstaller.AutoRearmInstaller.AutoRearmInstallPath = Environment.CurrentDirectory; //AutoRearmInstaller.AutoRearmInstaller.DeleteAutoRearmNormalTask(); AutoRearmInstaller.AutoRearmInstaller.MakeAutoRearmNormalTask(); }