Update Updater, Configuration

Update MainForm Binding Servers,Modes
This commit is contained in:
ChsBuffer
2021-06-05 18:37:12 +08:00
parent 34acb6b281
commit 8a48e321b5
11 changed files with 115 additions and 135 deletions

View File

@@ -5,6 +5,7 @@ using Netch.Models;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Serilog;
@@ -79,7 +80,8 @@ namespace Netch.Utils
var processList = instances.Select(instance => instance.Id).ToList();
Log.Information("流量统计进程: {Processes}", $"{string.Join(",", instances.Select(instance => $"({instance.Id})" + instance.ProcessName).ToArray())}");
Log.Information("流量统计进程: {Processes}",
$"{string.Join(",", instances.Select(instance => $"({instance.Id})" + instance.ProcessName).ToArray())}");
received = 0;
@@ -118,7 +120,7 @@ namespace Netch.Utils
while (Global.MainForm.State != State.Stopped)
{
Task.Delay(1000).Wait();
Thread.Sleep(1000);
lock (counterLock)
Global.MainForm.OnBandwidthUpdated(received);
}

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using Serilog;
namespace Netch.Utils
@@ -15,7 +16,13 @@ namespace Netch.Utils
/// </summary>
public static string DataDirectoryFullName => Path.Combine(Global.NetchDir, "data");
public static string SettingFileFullName => $"{DataDirectoryFullName}\\settings.json";
public static string FileFullName => Path.Combine(DataDirectoryFullName, FileName);
private static string BackupFileFullName => Path.Combine(DataDirectoryFullName, BackupFileName);
private const string FileName = "settings.json";
private const string BackupFileName = "settings.json.bak";
private static readonly JsonSerializerOptions JsonSerializerOptions = Global.NewDefaultJsonSerializerOptions;
@@ -25,33 +32,44 @@ namespace Netch.Utils
JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
}
/// <summary>
/// 加载配置
/// </summary>
public static void Load()
public static async Task LoadAsync()
{
if (File.Exists(SettingFileFullName))
try
{
try
if (!File.Exists(FileFullName))
{
using var fileStream = File.OpenRead(SettingFileFullName);
var settings = JsonSerializer.DeserializeAsync<Setting>(fileStream, JsonSerializerOptions).Result!;
CheckSetting(settings);
Global.Settings = settings;
}
catch (Exception e)
{
Log.Error(e,"加载配置异常");
Environment.Exit(-1);
Global.Settings = null!;
await SaveAsync();
return;
}
if (await LoadAsyncCore(FileFullName))
return;
Log.Information("尝试加载备份配置文件 {FileName}", BackupFileFullName);
await LoadAsyncCore(BackupFileFullName);
}
else
catch (Exception e)
{
// 保存默认设置
Save();
Log.Error(e, "加载配置异常");
Environment.Exit(-1);
}
}
private static async ValueTask<bool> LoadAsyncCore(string filename)
{
try
{
await using var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true);
var settings = (await JsonSerializer.DeserializeAsync<Setting>(fs, JsonSerializerOptions))!;
CheckSetting(settings);
Global.Settings = settings;
return true;
}
catch (Exception e)
{
Log.Error(e, @"从 {FileName} 加载配置异常", filename);
return false;
}
}
@@ -70,13 +88,26 @@ namespace Netch.Utils
/// <summary>
/// 保存配置
/// </summary>
public static void Save()
public static async Task SaveAsync()
{
if (!Directory.Exists(DataDirectoryFullName))
Directory.CreateDirectory(DataDirectoryFullName);
try
{
if (!Directory.Exists(DataDirectoryFullName))
Directory.CreateDirectory(DataDirectoryFullName);
using var fileStream = File.Create(SettingFileFullName);
JsonSerializer.SerializeAsync(fileStream, Global.Settings, JsonSerializerOptions).Wait();
var tempFile = Path.Combine(DataDirectoryFullName, FileFullName + ".tmp");
await using (var fileStream = new FileStream(tempFile, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true))
{
await JsonSerializer.SerializeAsync(fileStream, Global.Settings, JsonSerializerOptions);
}
File.Replace(tempFile, FileFullName, BackupFileFullName);
}
catch (Exception e)
{
Log.Error(e, "保存配置异常");
}
}
}
}

View File

@@ -42,7 +42,6 @@ namespace Netch.Utils
return;
Load();
Global.MainForm.LoadModes();
}
public static string GetRelativePath(string fullName)

View File

@@ -1,9 +1,11 @@
using System;
using System.Diagnostics;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading.Tasks;
using Netch.Models;
using Vanara.PInvoke;
@@ -47,7 +49,11 @@ namespace Netch.Utils
if (metric != null)
arguments += $"metric={metric} ";
Utils.ProcessRunHiddenAsync("netsh", arguments).Wait();
Process.Start(new ProcessStartInfo("netsh.exe", arguments)
{
UseShellExecute = false,
Verb = "runas"
})!.WaitForExit();
}
}

View File

@@ -228,37 +228,6 @@ namespace Netch.Utils
}
}
public static async Task ProcessRunHiddenAsync(string fileName, string arguments = "", bool print = true)
{
var p = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
WindowStyle = ProcessWindowStyle.Hidden,
Verb = "runas",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
Log.Debug($"{fileName} {arguments}");
p.Start();
var output = await p.StandardOutput.ReadToEndAsync();
var error = await p.StandardError.ReadToEndAsync();
if (print)
{
Console.Write(output);
Console.Write(error);
}
await p.WaitForExitAsync();
}
public static int SubnetToCidr(string value)
{
var subnet = IPAddress.Parse(value);