diff --git a/PublishSite/PublishForm.Designer.cs b/PublishSite/PublishForm.Designer.cs index 747519e4..6541aedd 100644 --- a/PublishSite/PublishForm.Designer.cs +++ b/PublishSite/PublishForm.Designer.cs @@ -38,6 +38,9 @@ tabControl1 = new TabControl(); tabPage1 = new TabPage(); groupBox4 = new GroupBox(); + serviceConfigSaveBtn = new Button(); + servicePortTBox = new TextBox(); + label6 = new Label(); serviceNameTBox = new TextBox(); label10 = new Label(); deleteService_Btn = new Button(); @@ -55,16 +58,18 @@ label2 = new Label(); startOrStopServiceTbox = new TextBox(); tabPage2 = new TabPage(); + bakConfigSaveBtn = new Button(); startBakBtn = new Button(); - bakPublishPath = new TextBox(); + backPublishPath = new TextBox(); label5 = new Label(); bakDbName = new TextBox(); label4 = new Label(); - bakPathTBox = new TextBox(); + backPathTBox = new TextBox(); label3 = new Label(); groupBox5 = new GroupBox(); netCorePublishBtn = new Button(); vuePublishBtn = new Button(); + openFileDialog1 = new OpenFileDialog(); groupBox1.SuspendLayout(); groupBox3.SuspendLayout(); tabControl1.SuspendLayout(); @@ -97,6 +102,7 @@ rb_production.TabIndex = 3; rb_production.Text = "正式"; rb_production.UseVisualStyleBackColor = true; + rb_production.Click += rb_Env_CheckedChanged; // // rb_Verify // @@ -107,6 +113,7 @@ rb_Verify.TabIndex = 2; rb_Verify.Text = "验证"; rb_Verify.UseVisualStyleBackColor = true; + rb_Verify.Click += rb_Env_CheckedChanged; // // rb_test // @@ -117,6 +124,7 @@ rb_test.TabIndex = 1; rb_test.Text = "测试"; rb_test.UseVisualStyleBackColor = true; + rb_test.Click += rb_Env_CheckedChanged; // // rb_local // @@ -129,13 +137,14 @@ rb_local.TabStop = true; rb_local.Text = "本机"; rb_local.UseVisualStyleBackColor = true; + rb_local.Click += rb_Env_CheckedChanged; // // groupBox3 // groupBox3.Controls.Add(logTBox); groupBox3.Location = new Point(691, 24); groupBox3.Name = "groupBox3"; - groupBox3.Size = new Size(412, 1048); + groupBox3.Size = new Size(559, 1048); groupBox3.TabIndex = 3; groupBox3.TabStop = false; groupBox3.Text = "日志"; @@ -144,7 +153,7 @@ // logTBox.Location = new Point(23, 21); logTBox.Name = "logTBox"; - logTBox.Size = new Size(359, 1013); + logTBox.Size = new Size(517, 1013); logTBox.TabIndex = 1; logTBox.Text = ""; // @@ -172,6 +181,9 @@ // // groupBox4 // + groupBox4.Controls.Add(serviceConfigSaveBtn); + groupBox4.Controls.Add(servicePortTBox); + groupBox4.Controls.Add(label6); groupBox4.Controls.Add(serviceNameTBox); groupBox4.Controls.Add(label10); groupBox4.Controls.Add(deleteService_Btn); @@ -185,11 +197,37 @@ groupBox4.Controls.Add(selectPathBtn); groupBox4.Location = new Point(20, 28); groupBox4.Name = "groupBox4"; - groupBox4.Size = new Size(538, 311); + groupBox4.Size = new Size(538, 372); groupBox4.TabIndex = 40; groupBox4.TabStop = false; groupBox4.Text = "服务创建与删除"; // + // serviceConfigSaveBtn + // + serviceConfigSaveBtn.Location = new Point(72, 278); + serviceConfigSaveBtn.Name = "serviceConfigSaveBtn"; + serviceConfigSaveBtn.Size = new Size(128, 40); + serviceConfigSaveBtn.TabIndex = 41; + serviceConfigSaveBtn.Text = "服务配置保存"; + serviceConfigSaveBtn.UseVisualStyleBackColor = true; + serviceConfigSaveBtn.Click += serviceConfigSaveBtn_Click; + // + // servicePortTBox + // + servicePortTBox.Location = new Point(141, 169); + servicePortTBox.Name = "servicePortTBox"; + servicePortTBox.Size = new Size(259, 23); + servicePortTBox.TabIndex = 40; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(71, 172); + label6.Name = "label6"; + label6.Size = new Size(32, 17); + label6.TabIndex = 39; + label6.Text = "端口"; + // // serviceNameTBox // serviceNameTBox.Location = new Point(140, 33); @@ -209,7 +247,6 @@ // // deleteService_Btn // - deleteService_Btn.Enabled = false; deleteService_Btn.Location = new Point(417, 33); deleteService_Btn.Name = "deleteService_Btn"; deleteService_Btn.Size = new Size(95, 27); @@ -229,8 +266,7 @@ // // createService_Btn // - createService_Btn.Enabled = false; - createService_Btn.Location = new Point(167, 232); + createService_Btn.Location = new Point(276, 278); createService_Btn.Name = "createService_Btn"; createService_Btn.Size = new Size(128, 40); createService_Btn.TabIndex = 37; @@ -248,11 +284,10 @@ // // en_TBox // - en_TBox.Location = new Point(140, 176); + en_TBox.Location = new Point(141, 214); en_TBox.Name = "en_TBox"; en_TBox.Size = new Size(259, 23); en_TBox.TabIndex = 36; - en_TBox.Text = "Development"; // // label9 // @@ -266,7 +301,7 @@ // label1 // label1.AutoSize = true; - label1.Location = new Point(71, 176); + label1.Location = new Point(72, 214); label1.Name = "label1"; label1.Size = new Size(44, 17); label1.TabIndex = 35; @@ -274,7 +309,6 @@ // // exePathTbox // - exePathTbox.Enabled = false; exePathTbox.Location = new Point(140, 126); exePathTbox.Name = "exePathTbox"; exePathTbox.Size = new Size(259, 23); @@ -282,7 +316,6 @@ // // selectPathBtn // - selectPathBtn.Enabled = false; selectPathBtn.Location = new Point(417, 125); selectPathBtn.Name = "selectPathBtn"; selectPathBtn.Size = new Size(95, 27); @@ -297,7 +330,7 @@ groupBox2.Controls.Add(startServiceBtn); groupBox2.Controls.Add(label2); groupBox2.Controls.Add(startOrStopServiceTbox); - groupBox2.Location = new Point(20, 391); + groupBox2.Location = new Point(19, 431); groupBox2.Name = "groupBox2"; groupBox2.Size = new Size(538, 187); groupBox2.TabIndex = 39; @@ -306,7 +339,6 @@ // // stopServiceBtn // - stopServiceBtn.Enabled = false; stopServiceBtn.Location = new Point(261, 101); stopServiceBtn.Name = "stopServiceBtn"; stopServiceBtn.Size = new Size(128, 40); @@ -317,7 +349,6 @@ // // startServiceBtn // - startServiceBtn.Enabled = false; startServiceBtn.Location = new Point(94, 101); startServiceBtn.Name = "startServiceBtn"; startServiceBtn.Size = new Size(128, 40); @@ -341,16 +372,16 @@ startOrStopServiceTbox.Name = "startOrStopServiceTbox"; startOrStopServiceTbox.Size = new Size(259, 23); startOrStopServiceTbox.TabIndex = 31; - startOrStopServiceTbox.Text = "EI_Image_Viewer"; // // tabPage2 // + tabPage2.Controls.Add(bakConfigSaveBtn); tabPage2.Controls.Add(startBakBtn); - tabPage2.Controls.Add(bakPublishPath); + tabPage2.Controls.Add(backPublishPath); tabPage2.Controls.Add(label5); tabPage2.Controls.Add(bakDbName); tabPage2.Controls.Add(label4); - tabPage2.Controls.Add(bakPathTBox); + tabPage2.Controls.Add(backPathTBox); tabPage2.Controls.Add(label3); tabPage2.Location = new Point(4, 26); tabPage2.Name = "tabPage2"; @@ -360,9 +391,19 @@ tabPage2.Text = "备份与发布"; tabPage2.UseVisualStyleBackColor = true; // + // bakConfigSaveBtn + // + bakConfigSaveBtn.Location = new Point(134, 207); + bakConfigSaveBtn.Name = "bakConfigSaveBtn"; + bakConfigSaveBtn.Size = new Size(187, 53); + bakConfigSaveBtn.TabIndex = 42; + bakConfigSaveBtn.Text = "备份配置保存"; + bakConfigSaveBtn.UseVisualStyleBackColor = true; + bakConfigSaveBtn.Click += bakConfigSaveBtn_Click; + // // startBakBtn // - startBakBtn.Location = new Point(160, 204); + startBakBtn.Location = new Point(375, 207); startBakBtn.Name = "startBakBtn"; startBakBtn.Size = new Size(213, 53); startBakBtn.TabIndex = 6; @@ -370,56 +411,53 @@ startBakBtn.UseVisualStyleBackColor = true; startBakBtn.Click += startBakBtn_Click; // - // bakPublishPath + // backPublishPath // - bakPublishPath.Enabled = false; - bakPublishPath.Location = new Point(117, 125); - bakPublishPath.Name = "bakPublishPath"; - bakPublishPath.Size = new Size(474, 23); - bakPublishPath.TabIndex = 5; + backPublishPath.Location = new Point(160, 125); + backPublishPath.Name = "backPublishPath"; + backPublishPath.Size = new Size(431, 23); + backPublishPath.TabIndex = 5; // // label5 // label5.AutoSize = true; - label5.Location = new Point(6, 128); + label5.Location = new Point(61, 125); label5.Name = "label5"; - label5.Size = new Size(104, 17); + label5.Size = new Size(92, 17); label5.TabIndex = 4; - label5.Text = "发布程序备份路径"; + label5.Text = "备份程序根路径"; // // bakDbName // - bakDbName.Enabled = false; - bakDbName.Location = new Point(114, 28); + bakDbName.Location = new Point(160, 28); bakDbName.Name = "bakDbName"; - bakDbName.Size = new Size(474, 23); + bakDbName.Size = new Size(428, 23); bakDbName.TabIndex = 3; // // label4 // label4.AutoSize = true; - label4.Location = new Point(20, 31); + label4.Location = new Point(85, 28); label4.Name = "label4"; label4.Size = new Size(68, 17); label4.TabIndex = 2; label4.Text = "备份数据库"; // - // bakPathTBox + // backPathTBox // - bakPathTBox.Enabled = false; - bakPathTBox.Location = new Point(115, 75); - bakPathTBox.Name = "bakPathTBox"; - bakPathTBox.Size = new Size(474, 23); - bakPathTBox.TabIndex = 1; + backPathTBox.Location = new Point(160, 75); + backPathTBox.Name = "backPathTBox"; + backPathTBox.Size = new Size(429, 23); + backPathTBox.TabIndex = 1; // // label3 // label3.AutoSize = true; label3.Location = new Point(6, 79); label3.Name = "label3"; - label3.Size = new Size(92, 17); + label3.Size = new Size(152, 17); label3.TabIndex = 0; - label3.Text = "数据库备份路径"; + label3.Text = "数据库和发布程序备份路径"; // // groupBox5 // @@ -434,7 +472,6 @@ // // netCorePublishBtn // - netCorePublishBtn.Enabled = false; netCorePublishBtn.Location = new Point(351, 50); netCorePublishBtn.Name = "netCorePublishBtn"; netCorePublishBtn.Size = new Size(128, 40); @@ -445,7 +482,6 @@ // // vuePublishBtn // - vuePublishBtn.Enabled = false; vuePublishBtn.Location = new Point(91, 50); vuePublishBtn.Name = "vuePublishBtn"; vuePublishBtn.Size = new Size(128, 40); @@ -454,18 +490,21 @@ vuePublishBtn.UseVisualStyleBackColor = true; vuePublishBtn.Click += vuePublishBtn_Click; // + // openFileDialog1 + // + openFileDialog1.FileName = "openFileDialog1"; + // // PublishForm // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1131, 1074); + ClientSize = new Size(1275, 1074); Controls.Add(groupBox5); Controls.Add(tabControl1); Controls.Add(groupBox3); Controls.Add(groupBox1); Name = "PublishForm"; Text = "PublishForm"; - Load += PublishForm_Load; groupBox1.ResumeLayout(false); groupBox1.PerformLayout(); groupBox3.ResumeLayout(false); @@ -509,15 +548,20 @@ private Label label2; private TextBox startOrStopServiceTbox; private Label label4; - private TextBox bakPathTBox; + private TextBox backPathTBox; private Label label3; private TextBox bakDbName; - private TextBox bakPublishPath; + private TextBox backPublishPath; private Label label5; private GroupBox groupBox4; private Button startBakBtn; private GroupBox groupBox5; private Button netCorePublishBtn; private Button vuePublishBtn; + private TextBox servicePortTBox; + private Label label6; + private OpenFileDialog openFileDialog1; + private Button serviceConfigSaveBtn; + private Button bakConfigSaveBtn; } } \ No newline at end of file diff --git a/PublishSite/PublishForm.cs b/PublishSite/PublishForm.cs index ec9f6bd9..82fffc54 100644 --- a/PublishSite/PublishForm.cs +++ b/PublishSite/PublishForm.cs @@ -13,6 +13,12 @@ using System.Security; using System.Diagnostics; using System.Net; using Renci.SshNet; +using Serilog; +using Newtonsoft.Json.Linq; +using System.ServiceProcess; +using Renci.SshNet.Messages; +using System.Management; +using System.IO; namespace PublishSite { @@ -21,10 +27,16 @@ namespace PublishSite public PublishForm() { InitializeComponent(); + + Serilog.Log.Logger = new LoggerConfiguration() + .WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day) + .CreateLogger(); + } + public string EnvName = ""; - public string CurrentEnv = "Local"; + public JObject jObjectCofig; public string Host = ""; @@ -32,29 +44,229 @@ namespace PublishSite public string Password = ""; - - - - private void PublishForm_Load(object sender, EventArgs e) + private void WinformLog(string message, Color? color = null) { - string remoteComputerName = "123.56.94.154"; // 远程计算机名称 - string userName = "Administrator"; // 用户名 - string password = "WHxckj2019"; // 密码 + if (InvokeRequired) + { + Invoke(new Action(() => WinformLog(message, color))); + return; + } - string localFilePath = $@"D:\testUpload.txt"; - string remoteFilePath = $@"C:\temp\testUpload.txt"; - - - CopyFileToRemote(localFilePath, remoteFilePath, remoteComputerName, userName, password); + logTBox.SelectionColor = color == null ? Color.Green : (Color)color; + logTBox.AppendText($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}: {message}" + Environment.NewLine); + Serilog.Log.Information(message); } - private void startBakBtn_Click(object sender, EventArgs e) + + #region 切换环境 配置回写 + + private void rb_Env_CheckedChanged(object sender, EventArgs e) { + + //本地 + if (rb_local.Checked) + { + EnvName = "本地"; + WinformLog($"当前操作环境切换为: 本地", Color.DarkRed); + + var configJson = File.ReadAllText("appsettings.local.json"); + + jObjectCofig = JObject.Parse(configJson); + + } + //测试 + if (rb_test.Checked) + { + EnvName = "测试"; + WinformLog($"当前操作环境切换为: 测试", Color.DarkRed); + + var configJson = File.ReadAllText("appsettings.Development.json"); + + jObjectCofig = JObject.Parse(configJson); + } + //验证 + if (rb_Verify.Checked) + { + EnvName = "验证"; + WinformLog($"当前操作环境切换为: 验证", Color.DarkRed); + + var configJson = File.ReadAllText("appsettings.Verify.json"); + + jObjectCofig = JObject.Parse(configJson); + } + //生产 + if (rb_production.Checked) + { + EnvName = "生产"; + WinformLog($"当前操作环境切换为: 生产", Color.DarkRed); + + var configJson = File.ReadAllText("appsettings.Production.json"); + + jObjectCofig = JObject.Parse(configJson); + } + + + + #region 界面控件赋值 + + + + Host = rb_local.Checked ? "" : jObjectCofig["Credential"]["Host"].ToString(); + UserName = rb_local.Checked ? "" : jObjectCofig["Credential"]["UserName"].ToString(); + Password = rb_local.Checked ? "" : jObjectCofig["Credential"]["Password"].ToString(); + + + serviceNameTBox.Text = jObjectCofig["DefaultService"]["ServiceName"].ToString(); + serviceDisplayNameTBox.Text = jObjectCofig["DefaultService"]["ServiceDisplayName"].ToString(); + servicePortTBox.Text = jObjectCofig["DefaultService"]["ServicePort"].ToString(); + exePathTbox.Text = jObjectCofig["DefaultService"]["BinPath"].ToString(); + en_TBox.Text = jObjectCofig["DefaultService"]["Env"].ToString(); + + + + startOrStopServiceTbox.Text = jObjectCofig["DefaultService"]["ServiceName"].ToString(); + + + bakDbName.Text = jObjectCofig["BackUp"]["DataBaseName"].ToString(); + backPathTBox.Text = jObjectCofig["BackUp"]["BackPath"].ToString(); + backPublishPath.Text = jObjectCofig["BackUp"]["ProgramRootPath"].ToString(); + + + var credentialNode = jObjectCofig["Credential"]; + + var defaultServiceNode = jObjectCofig["DefaultService"]; + + var BackUpNode = jObjectCofig["BackUp"]; + + + #endregion } + private void serviceConfigSaveBtn_Click(object sender, EventArgs e) + { + var serviceName = serviceNameTBox.Text; + DialogResult dr = MessageBox.Show($"{EnvName}环境服务配置回写 ?", "保存提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); + + if (dr == DialogResult.OK) + { + var path = string.Empty; + if (rb_local.Checked) + { + path = "appsettings.local.json"; + + } + if (rb_test.Checked) + { + path = "appsettings.Development.json"; + + } + if (rb_Verify.Checked) + { + path = "appsettings.Verify.json"; + + } + if (rb_production.Checked) + { + path = "appsettings.Production.json"; + + } + var configJson = File.ReadAllText(path); + + jObjectCofig = JObject.Parse(configJson); + + jObjectCofig["DefaultService"]["ServiceName"] = serviceNameTBox.Text.Trim(); + jObjectCofig["DefaultService"]["ServiceDisplayName"] = serviceDisplayNameTBox.Text.Trim(); + jObjectCofig["DefaultService"]["ServicePort"] = servicePortTBox.Text.Trim(); + jObjectCofig["DefaultService"]["BinPath"] = exePathTbox.Text.Trim(); + jObjectCofig["DefaultService"]["Env"] = en_TBox.Text.Trim(); + + + File.WriteAllText(path, jObjectCofig.ToString()); + + WinformLog("服务配置回写成功!"); + } + } + + private void bakConfigSaveBtn_Click(object sender, EventArgs e) + { + var serviceName = serviceNameTBox.Text; + DialogResult dr = MessageBox.Show($"{EnvName}环境备份配置回写 ?", "保存提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); + + if (dr == DialogResult.OK) + { + var path = string.Empty; + if (rb_local.Checked) + { + path = "appsettings.local.json"; + + } + if (rb_test.Checked) + { + path = "appsettings.Development.json"; + + } + if (rb_Verify.Checked) + { + path = "appsettings.Verify.json"; + + } + if (rb_production.Checked) + { + path = "appsettings.Production.json"; + + } + var configJson = File.ReadAllText(path); + + jObjectCofig = JObject.Parse(configJson); + + jObjectCofig["BackUp"]["DataBaseName"] = bakDbName.Text.Trim(); + jObjectCofig["BackUp"]["BackPath"] = backPathTBox.Text.Trim(); + jObjectCofig["BackUp"]["ProgramRootPath"] = backPublishPath.Text.Trim(); + + File.WriteAllText(path, jObjectCofig.ToString()); + + WinformLog("备份配置回写成功!"); + } + } + + #endregion + + #region 备份 + + + private async void startBakBtn_Click(object sender, EventArgs e) + { + await Task.Run(() => + { + if (rb_local.Checked) + { + + } + else + { + + using (var client = new SshClient(Host, UserName, Password)) + { + var backRootPath = jObjectCofig[] + + // 判断文件夹是否存在 + var backupFolderPath = "/path/to/backup/folder"; + var command = $"if [ ! -d '{backupFolderPath}' ]; then mkdir {backupFolderPath}; fi"; + var result = client.RunCommand(command); + } + + } + + }); + } + + + #endregion + + #region 服务的创建与删除 private void createService_Btn_Click(object sender, EventArgs e) @@ -62,14 +274,101 @@ namespace PublishSite } - private void deleteService_Btn_Click(object sender, EventArgs e) + private async void deleteService_Btn_Click(object sender, EventArgs e) { + var serviceName = serviceNameTBox.Text; + DialogResult dr = MessageBox.Show($"{EnvName}环境删除服务:{serviceName}?", "删除提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); + + if (dr == DialogResult.OK) + { + + await Task.Run(() => + { + + if (rb_local.Checked) + { + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = "cmd.exe"; + startInfo.Arguments = $"/c sc query {serviceName} | find \"STATE\" | find /i \"RUNNING\" && net stop {serviceName} & sc delete {serviceName}"; + + // 在后台运行命令行窗口 + startInfo.WindowStyle = ProcessWindowStyle.Hidden; + startInfo.CreateNoWindow = true; + + using (Process process = new Process()) + { + process.StartInfo = startInfo; + process.Start(); + + process.WaitForExit(); + + if (process.ExitCode == 0) + { + WinformLog($"{serviceName} 服务已经成功删除!"); + } + else + { + WinformLog($"尝试停止并删除 {serviceName} 服务失败,请检查是否拥有管理员权限或服务是否存在。", Color.Red); + } + } + } + else + { + + using (var client = new SshClient(Host, UserName, Password)) + { + // 连接到远程服务器 + client.Connect(); + + // 停止服务 + string stopCommand = $"sc stop {serviceName}"; + using (var stopCmd = client.CreateCommand(stopCommand)) + { + WinformLog(stopCommand); + var stopOutput = stopCmd.Execute(); + WinformLog(stopOutput); + } + + // 删除服务 + string deleteCommand = $"sc delete {serviceName}"; + using (var deleteCmd = client.CreateCommand(deleteCommand)) + { + WinformLog(deleteCommand); + var deleteOutput = deleteCmd.Execute(); + WinformLog(deleteOutput); + } + + // 断开SSH连接 + client.Disconnect(); + } + + } + + + }); + + + } } private void selectPathBtn_Click(object sender, EventArgs e) { + if (rb_local.Checked) + { + OpenFileDialog dialog = new OpenFileDialog(); + if (dialog.ShowDialog() == DialogResult.OK) + { + exePathTbox.Text = dialog.FileName; + + WinformLog($"部署启动文件选择成功", Color.Green); + } + } + else + { + WinformLog("远程环境不支持直接选择目录", Color.Red); + } } #endregion @@ -78,72 +377,90 @@ namespace PublishSite #region 测试环境发布 - private void vuePublishBtn_Click(object sender, EventArgs e) + private async void vuePublishBtn_Click(object sender, EventArgs e) { + vuePublishBtn.Enabled = false; - using (var client = new SshClient("123.56.94.154", "Administrator", "WHxckj2019")) + await Task.Run(() => { - // 连接到远程服务器 - client.Connect(); - //&& ./IRaCIS_Vue_Web.bat - string command = $@"cd C:\Users\Administrator\VueSourceCode && npm i && npm run build"; - - - using (var cmd = client.CreateCommand(command)) + using (var client = new SshClient("123.56.94.154", "Administrator", "WHxckj2019")) { + // 连接到远程服务器 + client.Connect(); - Console.WriteLine("开始执行"); - - Console.WriteLine(command); + //&& ./IRaCIS_Vue_Web.bat + string command = $@"cd C:\Users\Administrator\VueSourceCode && npm i && npm run build"; - var output = cmd.Execute(); + using (var cmd = client.CreateCommand(command)) + { - Console.WriteLine(output); + WinformLog("测试环境:开始执行前端发布"); + + WinformLog(command); - var output3 = cmd.Execute($@"xcopy /Y /Q ""C:\Users\Administrator\VueSourceCode\dist\index.html"" ""D:\Develop\PublishSite\IRaCIS.Vue.Web\dist\"""); + var output = cmd.Execute(); - Console.WriteLine(output); + WinformLog(output); - Console.WriteLine("发布成功"); + + var output3 = cmd.Execute($@"xcopy /Y /Q ""C:\Users\Administrator\VueSourceCode\dist\index.html"" ""D:\Develop\PublishSite\IRaCIS.Vue.Web\dist\"""); + + WinformLog(output); + + WinformLog("测试环境:前端发布成功"); + } + + // 断开SSH连接 + client.Disconnect(); } - // 断开SSH连接 - client.Disconnect(); - } + }); + + vuePublishBtn.Enabled = true; + } - private void netCorePublishBtn_Click(object sender, EventArgs e) + private async void netCorePublishBtn_Click(object sender, EventArgs e) { - using (var client = new SshClient("123.56.94.154", "Administrator", "WHxckj2019")) + + netCorePublishBtn.Enabled = false; + await Task.Run(() => { - // 连接到远程服务器 - client.Connect(); - - //&& ./IRaCIS_Vue_Web.bat - string command = $@"cd C:\Users\Administrator\bat\ && ./IRaCIS_Core_API.bat"; - using (var cmd = client.CreateCommand(command)) + using (var client = new SshClient("123.56.94.154", "Administrator", "WHxckj2019")) { + // 连接到远程服务器 + client.Connect(); - Console.WriteLine("开始执行"); + string command = $@"C:\Users\Administrator\bat\IRaCIS_Core_API.bat"; - Console.WriteLine(command); - var output = cmd.Execute(); + using (var cmd = client.CreateCommand(command)) + { - Console.WriteLine(output); + WinformLog("测试环境:开始执行后端发布"); - Console.WriteLine("发布成功"); + WinformLog(command); + + var output = cmd.Execute(); + + WinformLog(output); + + WinformLog("测试环境:后端发布成功"); + } + + // 断开SSH连接 + client.Disconnect(); } - // 断开SSH连接 - client.Disconnect(); - } + }); + netCorePublishBtn.Enabled = true; + } #endregion @@ -151,19 +468,105 @@ namespace PublishSite #region 服务的启动与停止 - private void startServiceBtn_Click(object sender, EventArgs e) + private async void startServiceBtn_Click(object sender, EventArgs e) { + startServiceBtn.Enabled = false; + await Task.Run(() => + { + if (rb_local.Checked) + { + ServiceController controller = new ServiceController($"{startOrStopServiceTbox.Text}"); + if (controller?.Status == ServiceControllerStatus.Running) + { + controller.Stop(); + controller.WaitForStatus(ServiceControllerStatus.Stopped); + } + else + { + WinformLog("服务不是停止状态", Color.Red); + } + return; + } + + using (var client = new SshClient(Host, UserName, Password)) + { + // 连接到远程服务器 + client.Connect(); + + string command = $@"sc start {startOrStopServiceTbox.Text}"; + + + using (var cmd = client.CreateCommand(command)) + { + WinformLog(command); + + var output = cmd.Execute(); + + WinformLog(output); + } + + // 断开SSH连接 + client.Disconnect(); + } + + + + }); + startServiceBtn.Enabled = true; } - private void stopServiceBtn_Click(object sender, EventArgs e) + private async void stopServiceBtn_Click(object sender, EventArgs e) { + startServiceBtn.Enabled = false; + await Task.Run(() => + { + if (rb_local.Checked) + { + ServiceController controller = new ServiceController($"{startOrStopServiceTbox.Text}"); + if (controller?.Status == ServiceControllerStatus.Running) + { + controller.Stop(); + controller.WaitForStatus(ServiceControllerStatus.Stopped); + } + else + { + WinformLog("服务不是启动状态", Color.Red); + } + return; + } + + using (var client = new SshClient(Host, UserName, Password)) + { + // 连接到远程服务器 + client.Connect(); + + string command = $@"sc stop {startOrStopServiceTbox.Text}"; + + + using (var cmd = client.CreateCommand(command)) + { + WinformLog(command); + + var output = cmd.Execute(); + + WinformLog(output); + } + + // 断开SSH连接 + client.Disconnect(); + } + + }); + startServiceBtn.Enabled = true; } #endregion + + } } diff --git a/PublishSite/PublishForm.resx b/PublishSite/PublishForm.resx index f298a7be..4a03187d 100644 --- a/PublishSite/PublishForm.resx +++ b/PublishSite/PublishForm.resx @@ -57,4 +57,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/PublishSite/PublishSite.csproj b/PublishSite/PublishSite.csproj index d9bd3453..6aaea559 100644 --- a/PublishSite/PublishSite.csproj +++ b/PublishSite/PublishSite.csproj @@ -44,8 +44,10 @@ + + diff --git a/PublishSite/appsettings.Development.json b/PublishSite/appsettings.Development.json index f091dac3..1c3de457 100644 --- a/PublishSite/appsettings.Development.json +++ b/PublishSite/appsettings.Development.json @@ -1,7 +1,7 @@ { "BackUp": { "DataBaseName": "IRaCIS_New_Tet", - "FullDBRootPath": "Warning", + "BackPath": "D:\\Develop\\PublishSite\\发布备份", "ProgramRootPath": "D:\\Develop\\PublishSite\\发布备份", "ConnectionStrings": "Server=.;Database=IRaCIS;Trusted_Connection=True;TrustServerCertificate=true" },