-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
111 lines (96 loc) · 4.19 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
//******************************************************************************************************
// Program.cs - Gbtc
//
// Copyright © 2020, Grid Protection Alliance. All Rights Reserved.
//
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
// file except in compliance with the License. You may obtain a copy of the License at:
//
// http://opensource.org/licenses/MIT
//
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
// License for the specific language governing permissions and limitations.
//
// Code Modification History:
// ----------------------------------------------------------------------------------------------------
// 10/11/2020 - J. Ritchie Carroll
// Generated original version of source code.
//
//******************************************************************************************************
using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using Gemstone.Configuration;
using GSF.Diagnostics;
using GSF.IO;
using Microsoft.Extensions.Configuration;
namespace AutoConfigPortScanner
{
internal static class Program
{
internal static LogPublisher Log { get; private set; }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static void Main(string[] args)
{
string localPath = FilePath.GetAbsolutePath("");
string logPath = string.Format("{0}{1}Logs{1}", localPath, Path.DirectorySeparatorChar);
try
{
if (!Directory.Exists(logPath))
Directory.CreateDirectory(logPath);
}
catch
{
logPath = localPath;
}
Logger.FileWriter.SetPath(logPath);
Logger.FileWriter.SetLoggingFileCount(10);
Logger.SuppressFirstChanceExceptionLogMessages();
// Create a new log publisher instance
Log = Logger.CreatePublisher(typeof(MainForm), MessageClass.Application);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
IConfiguration configuration = new ConfigurationBuilder()
.ConfigureGemstoneDefaults(Settings.ConfigureAppSettings, useINI: true)
.AddCommandLine(args, Settings.SwitchMappings)
.Build();
Settings settings = new(configuration);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new MainForm { Settings = settings });
}
catch (Exception ex)
{
Log.Publish(MessageLevel.Error, "Application", "Unhandled Application Exception", exception: ex);
}
try
{
settings.Save();
}
catch (Exception ex)
{
Log.Publish(MessageLevel.Error, "Application", "Save Settings Exception", exception: ex);
}
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = (Exception)e.ExceptionObject;
Log.Publish(MessageLevel.Error, "Application", "Unhandled AppDomain Exception", exception: ex);
}
private static void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
foreach (Exception ex in e.Exception.Flatten().InnerExceptions)
Log.Publish(MessageLevel.Error, "Task", "Unhandled Task Exception", exception: ex);
e.SetObserved();
}
}
}