Files

58 lines
1.7 KiB
C#

using System;
using System.Windows.Forms;
using TimeMocker.UI.Forms;
namespace TimeMocker.UI
{
internal static class Program
{
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// EasyHook requires elevated privileges for cross-process injection
if (!IsElevated())
{
var result = MessageBox.Show(
"TimeMocker needs to run as Administrator to inject into other processes.\n\n" +
"Please restart as Administrator.",
"Elevation Required",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning);
if (result == DialogResult.OK)
RestartAsAdmin();
return;
}
Application.Run(new MainForm());
}
private static bool IsElevated()
{
using var id = System.Security.Principal.WindowsIdentity.GetCurrent();
var principal = new System.Security.Principal.WindowsPrincipal(id);
return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}
private static void RestartAsAdmin()
{
var info = new System.Diagnostics.ProcessStartInfo
{
FileName = Application.ExecutablePath,
UseShellExecute = true,
Verb = "runas"
};
try
{
System.Diagnostics.Process.Start(info);
}
catch
{
/* user cancelled UAC */
}
}
}
}