using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Security.Principal; using System.Text; using System.Threading.Tasks; namespace GHelper { public static class ProcessHelper { private static long lastAdmin; public static void CheckAlreadyRunning() { Process currentProcess = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName); if (processes.Length > 1) { foreach (Process process in processes) if (process.Id != currentProcess.Id) try { process.Kill(); } catch (Exception ex) { Logger.WriteLine(ex.ToString()); MessageBox.Show(Properties.Strings.AppAlreadyRunningText, Properties.Strings.AppAlreadyRunning, MessageBoxButtons.OK); Application.Exit(); return; } } } public static bool IsUserAdministrator() { WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } public static void RunAsAdmin(string? param = null) { if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAdmin) < 2000) return; lastAdmin = DateTimeOffset.Now.ToUnixTimeMilliseconds(); // Check if the current user is an administrator if (!IsUserAdministrator()) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.UseShellExecute = true; startInfo.WorkingDirectory = Environment.CurrentDirectory; startInfo.FileName = Application.ExecutablePath; startInfo.Arguments = param; startInfo.Verb = "runas"; Process.Start(startInfo); Application.Exit(); } } public static void KillByName(string name) { foreach (var process in Process.GetProcessesByName(name)) { try { process.Kill(); Logger.WriteLine($"Stopped: {process.ProcessName}"); } catch (Exception ex) { Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}"); } } } public static void KillByProcess(Process process) { try { process.Kill(); Logger.WriteLine($"Stopped: {process.ProcessName}"); } catch (Exception ex) { Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}"); } } } }