Repository navigation
Expand file tree
/
Copy pathProgram.cs
More file actions
60 lines (53 loc) · 1.99 KB
/
Copy pathProgram.cs
File metadata and controls
60 lines (53 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using Microsoft.UI.Xaml;
using Microsoft.UI.Dispatching;
using System.Threading;
namespace ZapretMirrlyGUI;
public static class Program
{
private static Mutex? _singleInstanceMutex;
[STAThread]
public static void Main(string[] args)
{
bool skipAdminCheck = System.Linq.Enumerable.Contains(args, "--no-admin-check");
if (!IsAdministrator() && !skipAdminCheck)
{
try
{
var processInfo = new System.Diagnostics.ProcessStartInfo
{
FileName = Environment.ProcessPath,
UseShellExecute = true,
Verb = "runas",
Arguments = string.Join(" ", args)
};
System.Diagnostics.Process.Start(processInfo);
}
catch (System.ComponentModel.Win32Exception)
{
// User cancelled UAC prompt or failed to elevate
}
return;
}
_singleInstanceMutex = new Mutex(initiallyOwned: true, @"Local\ZapretMirrlyGUI.SingleInstance", out var createdNew);
if (!createdNew)
{
_singleInstanceMutex.Dispose();
_singleInstanceMutex = null;
return;
}
Environment.SetEnvironmentVariable("MICROSOFT_WINDOWSAPPRUNTIME_BASE_DIRECTORY", AppContext.BaseDirectory);
WinRT.ComWrappersSupport.InitializeComWrappers();
Application.Start(p =>
{
var context = new DispatcherQueueSynchronizationContext(DispatcherQueue.GetForCurrentThread());
SynchronizationContext.SetSynchronizationContext(context);
var app = new App();
});
}
private static bool IsAdministrator()
{
using var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
var principal = new System.Security.Principal.WindowsPrincipal(identity);
return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}
}