using Microsoft.AspNetCore.Hosting; using System.Runtime.InteropServices; using WCS.Core; using WCS.WebApi; using RedisHelper = WCS.Core.Redis.RedisHelper; namespace WCS.Service { public class Program { /// /// 程序入口 /// /// public static void Main(string[] args) { #region 接入Redis RedisHelper.CreateContext(AppSettings.Config.GetConnectionString("Redis"), "default", true); #endregion 接入Redis //互斥锁检测 var mutexName = RedisHelper.Default.Get("Mutex"); if (string.IsNullOrEmpty(mutexName)) { RedisHelper.Default.Set("Mutex", " "); Console.WriteLine("请在Redis中配置互斥量值"); return; } using var mt = new Mutex(true, mutexName); if (mt.WaitOne()) { Configs.AddSystemMode(SystemMode.虚拟plc); CreateHostBuilder(args).Build().Run(); mt.ReleaseMutex(); } else { Console.WriteLine("请勿重复运行"); //InfoLog.INFO_INIT("请勿重复运行"); Task.Delay(2000).Wait(); } } /// /// 创建一个主机构建器 /// /// /// public static IHostBuilder CreateHostBuilder(string[] args) { //是否是win平台 var isWin = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); Console.WriteLine($"win:{isWin}"); if (isWin) { return Host.CreateDefaultBuilder(args) .UseWindowsService()//win .ConfigureWebHostDefaults(web => //网络访问配置 { web.UseUrls("http://*:8080"); //设备访问端口 web.UseStartup(); //调用启动服务 }) .ConfigureServices((_, services) => { //services.AddDbContext(); services.AddHostedService(); services.AddHttpClient(); }); } return Host.CreateDefaultBuilder(args) .UseSystemd()//linux .ConfigureServices((_, services) => { services.AddHostedService(); }); } } }