publicstaticvoidMain(string[]args){ExceptionsHelp.Instance.ExecuteVoidFunc(()=>{InitLog4Net();InitSysValue();#region端口是否占用varisHttpPort=ComputerHelp.PortInUse(httpPort);if(isHttpPort){Console.WriteLine("httpPort端口已被占用:"+httpPort);return;}varisHttpsPort=ComputerHelp.PortInUse(httpsPort);if(isHttpsPort){Console.WriteLine("httpsPort端口已被占用:"+httpsPort);return;}#endregion#regionredis服务是否开启varisRedisServerOk=newRedisBase().IsStartRedisServer();if(!isRedisServerOk){Thread.Sleep(2000);return;}#endregionInitIConfiguration();#region本地封装日接口日志Logging.GetInstance.InitWriteInterLog();#endregion//证书根据实际情况开启//if(httpsPort!=0)InitCer();//启动java积木报表服务根据实际情况开启//Task.Factory.StartNew(InitJavaJiMuReport);CreateWebHostBuilder(args).Build().Run();});}publicstaticIWebHostBuilderCreateWebHostBuilder(string[]args){InitIConfiguration();returnWebHost.CreateDefaultBuilder(args).UseKestrel(options=>{options.AddServerHeader=false;//https://www.cnblogs.com/lxhbky/p/11969478.html//https://www.cnblogs.com/wucy/p/14824585.html//设置Body大小限制256MBoptions.Limits.MaxRequestBodySize=268435456;if(certificate!=null){options.Listen(IPAddress.Any,httpsPort,listenOptions=>{listenOptions.UseHttps(certificate);});}//http根据实际情况开启options.Listen(IPAddress.Any,httpPort);Console.WriteLine();Console.WriteLine("WebHostBuilder Init Started successfully!");Console.WriteLine();}).UseConfiguration(config).UseContentRoot(Directory.GetCurrentDirectory()).UseStartup<Startup>();}privatestaticvoidInitIConfiguration(){config=newConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory).AddEnvironmentVariables().AddJsonFile("certificate.json",optional:true,reloadOnChange:true).AddJsonFile($"certificate.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",optional:true,reloadOnChange:true).Build();}#region证书publicstaticvoidInitCer(){ConfigRead.GetInstance.GetAppsetConnection().HttpOrHttps="https";varcertificateSettings=config.GetSection("certificateSettings");varcertificateFileName=certificateSettings.GetValue<string>("filename");varcertificatePassword=certificateSettings.GetValue<string>("password");varfilePath=Path.Combine(AppContext.BaseDirectory,certificateFileName);if(!File.Exists(filePath)){Console.WriteLine("证书文件路径不存在,请确认发布属性是【始终复制】:"+filePath);Log4NetHelper.Instance.Info("Certificate path:"+filePath);}certificate=newX509Certificate2(certificateFileName,certificatePassword);cerPwd=certificatePassword;//内存缓存设置路径和密码定时器启动使用ConfigRead.GetInstance.GetAppsetConnection().CerPwd=cerPwd;ConfigRead.GetInstance.GetAppsetConnection().CerPath=cerPath;Console.WriteLine("InitCer Init Started successfully!");}#endregion#regionLog4NetprivatestaticvoidInitLog4Net(){Log4NetHelper.Instance.Repository=LogManager.CreateRepository("NETCoreRepository");varlog4Config=Path.Combine(Path.GetDirectoryName(typeof(Program).Assembly.Location),"Config","log4net.config");if(!File.Exists(log4Config)){Console.WriteLine("log4net.config文件路径不存在,请确认发布属性是【始终复制】:"+log4Config);Log4NetHelper.Instance.Info("Certificate path:"+log4Config);}XmlConfigurator.Configure(Log4NetHelper.Instance.Repository,newFileInfo(log4Config));Console.WriteLine("InitLog4Net Init Started successfully!");}#endregion#region获取配置信息privatestaticvoidInitSysValue(){httpPort=ConfigRead.GetInstance.GetAppsetConnection().HttpPort;httpsPort=ConfigRead.GetInstance.GetAppsetConnection().HttpsPort;reportPort=ConfigRead.GetInstance.GetAppsetConnection().ReportPort;cmdPath=@"C:\Windows\System32\cmd.exe";cerPath=Path.Combine(Path.GetDirectoryName(typeof(Program).Assembly.Location),"huaheng.pfx");if(!File.Exists(cerPath)){Console.WriteLine("cerPath文件路径不存在,请确认发布属性是【始终复制】:"+cerPath);Log4NetHelper.Instance.Info("Certificate path:"+cerPath);}SystemVariable.StartTime=DateTime.Now;ConfigRead.GetInstance.GetAppsetConnection().HttpOrHttps="http";Console.WriteLine("InitSysValue Init Started successfully!");}#endregion#regionInitJavaJiMuReportprivatestaticvoidInitJavaJiMuReport(){Console.WriteLine();varisReportPort=ComputerHelp.PortInUse(reportPort);if(isReportPort){Console.WriteLine($"ReportPort端口{reportPort}已占用,或者服务报表已经启动成功!Url【http://localhost:{reportPort}/jmreport/list】");Console.WriteLine();return;}varreportPath=Path.Combine(Path.GetDirectoryName(typeof(Program).Assembly.Location),"report");if(Directory.Exists(reportPath)){Console.WriteLine($"Init JavaJiMuReport Initing......Url【http://localhost:{reportPort}/jmreport/list】No exception is success!");varcmd=$"cd {reportPath}&javaServiceStart.bat";varoutput="";RunCmd(cmd,outoutput);Console.WriteLine(output);}else{Console.WriteLine("javaServiceStart.bat path is not existence!");}}///<summary>///执行cmd命令https://www.cnblogs.com/njl041x/p/3881550.html///多命令请使用批处理命令连接符:///<![CDATA[///&:同时执行两个命令///|:将上一个命令的输出,作为下一个命令的输入///&&:当&&前的命令成功时,才执行&&后的命令///||:当||前的命令失败时,才执行||后的命令]]>///其他请百度///</summary>///<paramname="cmd"></param>///<paramname="output"></param>privatestaticvoidRunCmd(stringcmd,outstringoutput){cmd=cmd.Trim().TrimEnd('&')+"&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态using(varp=newProcess()){p.StartInfo.FileName=cmdPath;p.StartInfo.UseShellExecute=false;//是否使用操作系统shell启动p.StartInfo.RedirectStandardInput=true;//接受来自调用程序的输入信息p.StartInfo.RedirectStandardOutput=true;//由调用程序获取输出信息p.StartInfo.RedirectStandardError=true;//重定向标准错误输出p.StartInfo.CreateNoWindow=true;//不显示程序窗口p.Start();//启动程序//向cmd窗口写入命令p.StandardInput.WriteLine(cmd);p.StandardInput.AutoFlush=true;//获取cmd窗口的输出信息output=p.StandardOutput.ReadToEnd();p.WaitForExit();//等待程序执行完退出进程p.Close();}