forked from ReClassNET/ReClass.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
142 lines (112 loc) · 3.8 KB
/
Copy pathProgram.cs
File metadata and controls
142 lines (112 loc) · 3.8 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
using System;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Threading;
using System.Windows.Forms;
using Microsoft.SqlServer.MessageBox;
using ReClassNET.Core;
using ReClassNET.Forms;
using ReClassNET.Logger;
using ReClassNET.Memory;
using ReClassNET.Native;
using ReClassNET.UI;
using ReClassNET.Util;
using SD.Tools.Algorithmia.Commands;
namespace ReClassNET
{
public static class Program
{
public static CommandLineArgs CommandLineArgs { get; private set; }
public static Settings Settings { get; private set; }
public static ILogger Logger { get; private set; }
public static Random GlobalRandom { get; } = new Random();
public static RemoteProcess RemoteProcess { get; private set; }
public static CoreFunctionsManager CoreFunctions => RemoteProcess.CoreFunctions;
public static MainForm MainForm { get; private set; }
public static bool DesignMode { get; private set; } = true;
public static FontEx MonoSpaceFont { get; private set; }
public static Guid CommandQueueID { get; private set; }
[STAThread]
static void Main(string[] args)
{
DesignMode = false; // The designer doesn't call Main()
CommandQueueID = Guid.NewGuid();
// wire event handlers for unhandled exceptions, so these will be shown using our own method.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic, true);
Application.ThreadException += new ThreadExceptionEventHandler(Program.Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException+=new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
CommandLineArgs = new CommandLineArgs(args);
try
{
DpiUtil.ConfigureProcess();
DpiUtil.TrySetDpiFromCurrentDesktop();
}
catch
{
// ignored
}
MonoSpaceFont = new FontEx
{
Font = new Font("Courier New", DpiUtil.ScaleIntX(13), GraphicsUnit.Pixel),
Width = DpiUtil.ScaleIntX(8),
Height = DpiUtil.ScaleIntY(16)
};
NativeMethods.EnableDebugPrivileges();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// switch is set to false, so Do actions during Undo actions are ignored.
CommandQueueManager.ThrowExceptionOnDoDuringUndo = false;
// activate our command queue stack. We're only changing things from the main thread so we don't need multiple stacks.
CommandQueueManagerSingleton.GetInstance().ActivateCommandQueueStack(CommandQueueID);
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
Settings = SettingsSerializer.Load();
Logger = new GuiLogger();
if (!NativeMethods.IsUnix() && Settings.RunAsAdmin && !WinUtil.IsAdministrator)
{
WinUtil.RunElevated(Process.GetCurrentProcess().MainModule?.FileName, args.Length > 0 ? string.Join(" ", args) : null);
return;
}
#if !DEBUG
try
{
#endif
using (var coreFunctions = new CoreFunctionsManager())
{
RemoteProcess = new RemoteProcess(coreFunctions);
MainForm = new MainForm();
Application.Run(MainForm);
RemoteProcess.Dispose();
}
#if !DEBUG
}
catch (Exception ex)
{
ShowException(ex);
}
#endif
SettingsSerializer.Save(Settings);
}
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
ShowException(e.Exception);
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
ShowException(e.ExceptionObject as Exception);
}
/// <summary>Shows the exception in a special form.</summary>
/// <param name="ex">The exception.</param>
public static void ShowException(Exception ex)
{
ex.HelpLink = Constants.HelpUrl;
var msg = new ExceptionMessageBox(ex)
{
Beep = false,
ShowToolBar = true,
Symbol = ExceptionMessageBoxSymbol.Error
};
msg.Show(null);
}
}
}