using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System; using System.Diagnostics; using System.IO; using System.Threading; using System.Threading.Tasks; namespace FastGithub.ReverseProxy { /// /// DnscryptProxy后台服务 /// sealed class DnscryptProxyHostedService : IHostedService { private const string dnscryptFile = "dnscrypt-proxy"; private readonly ILogger logger; private Process? dnscryptProcess; /// /// DnscryptProxy后台服务 /// /// public DnscryptProxyHostedService(ILogger logger) { this.logger = logger; } /// /// 启动dnscrypt-proxy /// /// /// public Task StartAsync(CancellationToken cancellationToken) { try { var fileName = dnscryptFile; if (OperatingSystem.IsWindows()) { fileName = $"{dnscryptFile}.exe"; } if (File.Exists(fileName) == true) { this.dnscryptProcess = Process.Start(new ProcessStartInfo { FileName = fileName, UseShellExecute = true, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden }); }; } catch (Exception ex) { this.logger.LogWarning(ex.Message); } return Task.CompletedTask; } /// /// 停止dnscrypt-proxy /// /// /// public Task StopAsync(CancellationToken cancellationToken) { if (this.dnscryptProcess != null) { this.dnscryptProcess.Kill(); } return Task.CompletedTask; } } }