using System.ComponentModel; namespace Bloxstrap { static class Utilities { public static void ShellExecute(string website) { try { Process.Start(new ProcessStartInfo { FileName = website, UseShellExecute = true }); } catch (Win32Exception ex) { // lmfao if (ex.NativeErrorCode != (int)ErrorCode.CO_E_APPNOTFOUND) throw; Process.Start(new ProcessStartInfo { FileName = "rundll32.exe", Arguments = $"shell32,OpenAs_RunDLL {website}" }); } } /// /// /// /// /// /// /// Result of System.Version.CompareTo
/// -1: version1 < version2
/// 0: version1 == version2
/// 1: version1 > version2 ///
public static VersionComparison CompareVersions(string versionStr1, string versionStr2) { var version1 = new Version(versionStr1.Replace("v", "")); var version2 = new Version(versionStr2.Replace("v", "")); return (VersionComparison)version1.CompareTo(version2); } public static string GetRobloxVersion(bool studio) { string fileName = studio ? "Studio/RobloxStudioBeta.exe" : "Player/RobloxPlayerBeta.exe"; string playerLocation = Path.Combine(Paths.Roblox, fileName); if (!File.Exists(playerLocation)) return ""; FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(playerLocation); if (versionInfo.ProductVersion is null) return ""; return versionInfo.ProductVersion.Replace(", ", "."); } public static Process[] GetProcessesSafe() { const string LOG_IDENT = "Utilities::GetProcessesSafe"; try { return Process.GetProcesses(); } catch (ArithmeticException ex) // thanks microsoft { App.Logger.WriteLine(LOG_IDENT, $"Unable to fetch processes!"); App.Logger.WriteException(LOG_IDENT, ex); return Array.Empty(); // can we retry? } } } }