-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
134 lines (117 loc) · 4.45 KB
/
Program.cs
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
#region Using statements
using DiskSpace.Forms;
using DiskSpace.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Runtime;
using System.Windows.Forms;
#endregion
[assembly: CLSCompliant(true)]
namespace DiskSpace
{
internal static class Program
{
#region Application entrypoint
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;
SetGCSettings();
if (StartedWithCommandLineArguments(args))
{
HandleCommandLineExecution(args);
return;
}
RunApplication();
}
#endregion
#region Private static methods and functions
internal static void SetGCSettings()
{
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GCSettings.LatencyMode = GCLatencyMode.Batch;
}
private static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
{
Log.Error = (Exception)e.ExceptionObject;
Log.Close("=== Application ended ===");
Environment.Exit(1);
}
private static void RunApplication()
{
Log.Info = "=== Application started ===";
Log.Info = Application.ProductName + " version " + Application.ProductVersion;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using (MainForm mainForm = new MainForm())
{
Application.Run(mainForm);
}
Log.Close("=== Application ended ===");
}
private static bool StartedWithCommandLineArguments(IReadOnlyCollection<string> args)
{
return args.Count != 0;
}
private static void HandleCommandLineExecution(string[] args)
{
string allParams = string.Join(" ", args);
bool startWithWindows = allParams.Contains("autorun=1");
bool notifications = allParams.Contains("notifications=1");
bool minimized = allParams.Contains("minimized=1");
bool start = allParams.Contains("start=1");
bool calledFromInstaller = allParams.Contains("autorun=") && allParams.Contains("notifications=") &&
allParams.Contains("minimized=") && allParams.Contains("start=");
if (calledFromInstaller)
{
Log.Info = "Installer configuration values received";
UpdateSettings(startWithWindows, notifications, minimized);
if (start)
{
StartApplicationAsSeparateProcess();
}
return;
}
ShowCommandLineUsage();
}
private static void ShowCommandLineUsage()
{
string executable = Path.GetFileName(Application.ExecutablePath);
Log.Info = string.Format(CultureInfo.InvariantCulture,
Resources.CommandLineTip, executable);
Console.WriteLine(string.Format(CultureInfo.InvariantCulture,
Resources.CommandLineTip, executable));
}
private static void StartApplicationAsSeparateProcess()
{
using (Process p = new Process())
{
p.StartInfo = new ProcessStartInfo(Application.ExecutablePath)
{
UseShellExecute = false
};
p.Start();
}
}
/// <summary>
/// Update settings
/// </summary>
/// <param name="startWithWindows">Start application when Windows starts</param>
/// <param name="notifications">Display balloon tip notifications</param>
/// <param name="minimized">Start application minimized</param>
private static void UpdateSettings(bool startWithWindows, bool notifications, bool minimized)
{
Settings.Default.startMinimized = minimized;
Settings.Default.startWithWindows = startWithWindows;
Settings.Default.notifyWhenSpaceChange = notifications;
Settings.Default.Save();
}
#endregion
}
}