修改
This commit is contained in:
Generated
+42
-40
@@ -28,6 +28,7 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
|
||||
groupBox1 = new GroupBox();
|
||||
connectButton = new Button();
|
||||
passwordTextBox = new TextBox();
|
||||
@@ -77,16 +78,16 @@
|
||||
groupBox1.Controls.Add(label3);
|
||||
groupBox1.Controls.Add(label2);
|
||||
groupBox1.Controls.Add(label1);
|
||||
groupBox1.Location = new Point(24, 25);
|
||||
groupBox1.Location = new Point(11, 12);
|
||||
groupBox1.Name = "groupBox1";
|
||||
groupBox1.Size = new Size(570, 230);
|
||||
groupBox1.Size = new Size(547, 205);
|
||||
groupBox1.TabIndex = 0;
|
||||
groupBox1.TabStop = false;
|
||||
groupBox1.Text = "第一步:验证数据库";
|
||||
//
|
||||
// connectButton
|
||||
//
|
||||
connectButton.Location = new Point(195, 168);
|
||||
connectButton.Location = new Point(195, 150);
|
||||
connectButton.Name = "connectButton";
|
||||
connectButton.Size = new Size(128, 40);
|
||||
connectButton.TabIndex = 6;
|
||||
@@ -96,7 +97,7 @@
|
||||
//
|
||||
// passwordTextBox
|
||||
//
|
||||
passwordTextBox.Location = new Point(154, 129);
|
||||
passwordTextBox.Location = new Point(154, 113);
|
||||
passwordTextBox.Name = "passwordTextBox";
|
||||
passwordTextBox.PasswordChar = '*';
|
||||
passwordTextBox.Size = new Size(271, 23);
|
||||
@@ -105,7 +106,7 @@
|
||||
//
|
||||
// usernameTextBox
|
||||
//
|
||||
usernameTextBox.Location = new Point(156, 82);
|
||||
usernameTextBox.Location = new Point(156, 73);
|
||||
usernameTextBox.Name = "usernameTextBox";
|
||||
usernameTextBox.Size = new Size(271, 23);
|
||||
usernameTextBox.TabIndex = 4;
|
||||
@@ -113,7 +114,7 @@
|
||||
//
|
||||
// serverTextBox
|
||||
//
|
||||
serverTextBox.Location = new Point(156, 37);
|
||||
serverTextBox.Location = new Point(156, 33);
|
||||
serverTextBox.Name = "serverTextBox";
|
||||
serverTextBox.Size = new Size(271, 23);
|
||||
serverTextBox.TabIndex = 3;
|
||||
@@ -122,7 +123,7 @@
|
||||
// label3
|
||||
//
|
||||
label3.AutoSize = true;
|
||||
label3.Location = new Point(107, 131);
|
||||
label3.Location = new Point(107, 113);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new Size(32, 17);
|
||||
label3.TabIndex = 2;
|
||||
@@ -131,7 +132,7 @@
|
||||
// label2
|
||||
//
|
||||
label2.AutoSize = true;
|
||||
label2.Location = new Point(101, 83);
|
||||
label2.Location = new Point(101, 73);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(44, 17);
|
||||
label2.TabIndex = 1;
|
||||
@@ -140,7 +141,7 @@
|
||||
// label1
|
||||
//
|
||||
label1.AutoSize = true;
|
||||
label1.Location = new Point(95, 38);
|
||||
label1.Location = new Point(95, 33);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(56, 17);
|
||||
label1.TabIndex = 0;
|
||||
@@ -162,9 +163,9 @@
|
||||
groupBox2.Controls.Add(nginxPortTBox);
|
||||
groupBox2.Controls.Add(label4);
|
||||
groupBox2.Controls.Add(label5);
|
||||
groupBox2.Location = new Point(24, 280);
|
||||
groupBox2.Location = new Point(12, 223);
|
||||
groupBox2.Name = "groupBox2";
|
||||
groupBox2.Size = new Size(570, 418);
|
||||
groupBox2.Size = new Size(546, 379);
|
||||
groupBox2.TabIndex = 1;
|
||||
groupBox2.TabStop = false;
|
||||
groupBox2.Text = "第二步: 部署参数配置";
|
||||
@@ -172,7 +173,7 @@
|
||||
// confimDeployBtn
|
||||
//
|
||||
confimDeployBtn.Enabled = false;
|
||||
confimDeployBtn.Location = new Point(195, 353);
|
||||
confimDeployBtn.Location = new Point(195, 319);
|
||||
confimDeployBtn.Name = "confimDeployBtn";
|
||||
confimDeployBtn.Size = new Size(128, 40);
|
||||
confimDeployBtn.TabIndex = 19;
|
||||
@@ -182,7 +183,7 @@
|
||||
//
|
||||
// serviceDisplayNameTBox
|
||||
//
|
||||
serviceDisplayNameTBox.Location = new Point(152, 303);
|
||||
serviceDisplayNameTBox.Location = new Point(152, 274);
|
||||
serviceDisplayNameTBox.Name = "serviceDisplayNameTBox";
|
||||
serviceDisplayNameTBox.Size = new Size(259, 23);
|
||||
serviceDisplayNameTBox.TabIndex = 16;
|
||||
@@ -190,7 +191,7 @@
|
||||
//
|
||||
// serviceNameTBox
|
||||
//
|
||||
serviceNameTBox.Location = new Point(152, 248);
|
||||
serviceNameTBox.Location = new Point(152, 228);
|
||||
serviceNameTBox.Name = "serviceNameTBox";
|
||||
serviceNameTBox.Size = new Size(259, 23);
|
||||
serviceNameTBox.TabIndex = 15;
|
||||
@@ -199,7 +200,7 @@
|
||||
// label11
|
||||
//
|
||||
label11.AutoSize = true;
|
||||
label11.Location = new Point(11, 304);
|
||||
label11.Location = new Point(11, 277);
|
||||
label11.Name = "label11";
|
||||
label11.Size = new Size(128, 17);
|
||||
label11.TabIndex = 14;
|
||||
@@ -208,7 +209,7 @@
|
||||
// label10
|
||||
//
|
||||
label10.AutoSize = true;
|
||||
label10.Location = new Point(35, 250);
|
||||
label10.Location = new Point(35, 231);
|
||||
label10.Name = "label10";
|
||||
label10.Size = new Size(104, 17);
|
||||
label10.TabIndex = 13;
|
||||
@@ -219,7 +220,7 @@
|
||||
selectPathBtn.Enabled = false;
|
||||
selectPathBtn.Location = new Point(429, 43);
|
||||
selectPathBtn.Name = "selectPathBtn";
|
||||
selectPathBtn.Size = new Size(118, 27);
|
||||
selectPathBtn.Size = new Size(95, 27);
|
||||
selectPathBtn.TabIndex = 12;
|
||||
selectPathBtn.Text = "选择";
|
||||
selectPathBtn.UseVisualStyleBackColor = true;
|
||||
@@ -228,7 +229,7 @@
|
||||
// folderPathTbox
|
||||
//
|
||||
folderPathTbox.Enabled = false;
|
||||
folderPathTbox.Location = new Point(152, 43);
|
||||
folderPathTbox.Location = new Point(152, 44);
|
||||
folderPathTbox.Name = "folderPathTbox";
|
||||
folderPathTbox.Size = new Size(259, 23);
|
||||
folderPathTbox.TabIndex = 11;
|
||||
@@ -236,7 +237,7 @@
|
||||
// label9
|
||||
//
|
||||
label9.AutoSize = true;
|
||||
label9.Location = new Point(83, 43);
|
||||
label9.Location = new Point(83, 48);
|
||||
label9.Name = "label9";
|
||||
label9.Size = new Size(56, 17);
|
||||
label9.TabIndex = 10;
|
||||
@@ -244,7 +245,7 @@
|
||||
//
|
||||
// dbNameTBox
|
||||
//
|
||||
dbNameTBox.Location = new Point(152, 191);
|
||||
dbNameTBox.Location = new Point(152, 182);
|
||||
dbNameTBox.Name = "dbNameTBox";
|
||||
dbNameTBox.Size = new Size(259, 23);
|
||||
dbNameTBox.TabIndex = 9;
|
||||
@@ -253,7 +254,7 @@
|
||||
// label8
|
||||
//
|
||||
label8.AutoSize = true;
|
||||
label8.Location = new Point(47, 197);
|
||||
label8.Location = new Point(47, 185);
|
||||
label8.Name = "label8";
|
||||
label8.Size = new Size(92, 17);
|
||||
label8.TabIndex = 8;
|
||||
@@ -261,7 +262,7 @@
|
||||
//
|
||||
// apiPortTBox
|
||||
//
|
||||
apiPortTBox.Location = new Point(152, 146);
|
||||
apiPortTBox.Location = new Point(152, 136);
|
||||
apiPortTBox.Name = "apiPortTBox";
|
||||
apiPortTBox.Size = new Size(259, 23);
|
||||
apiPortTBox.TabIndex = 5;
|
||||
@@ -269,7 +270,7 @@
|
||||
//
|
||||
// nginxPortTBox
|
||||
//
|
||||
nginxPortTBox.Location = new Point(152, 98);
|
||||
nginxPortTBox.Location = new Point(152, 90);
|
||||
nginxPortTBox.Name = "nginxPortTBox";
|
||||
nginxPortTBox.Size = new Size(259, 23);
|
||||
nginxPortTBox.TabIndex = 4;
|
||||
@@ -278,7 +279,7 @@
|
||||
// label4
|
||||
//
|
||||
label4.AutoSize = true;
|
||||
label4.Location = new Point(11, 153);
|
||||
label4.Location = new Point(11, 140);
|
||||
label4.Name = "label4";
|
||||
label4.Size = new Size(128, 17);
|
||||
label4.TabIndex = 3;
|
||||
@@ -287,7 +288,7 @@
|
||||
// label5
|
||||
//
|
||||
label5.AutoSize = true;
|
||||
label5.Location = new Point(35, 100);
|
||||
label5.Location = new Point(35, 93);
|
||||
label5.Name = "label5";
|
||||
label5.Size = new Size(104, 17);
|
||||
label5.TabIndex = 2;
|
||||
@@ -302,18 +303,18 @@
|
||||
groupBox3.Controls.Add(machineCodeLB);
|
||||
groupBox3.Controls.Add(label6);
|
||||
groupBox3.Controls.Add(label7);
|
||||
groupBox3.Location = new Point(24, 713);
|
||||
groupBox3.Location = new Point(14, 615);
|
||||
groupBox3.Name = "groupBox3";
|
||||
groupBox3.Size = new Size(570, 221);
|
||||
groupBox3.Size = new Size(544, 221);
|
||||
groupBox3.TabIndex = 2;
|
||||
groupBox3.TabStop = false;
|
||||
groupBox3.Text = "第三步:激活与部署";
|
||||
//
|
||||
// btnCopy
|
||||
//
|
||||
btnCopy.Location = new Point(429, 51);
|
||||
btnCopy.Location = new Point(429, 39);
|
||||
btnCopy.Name = "btnCopy";
|
||||
btnCopy.Size = new Size(118, 27);
|
||||
btnCopy.Size = new Size(93, 27);
|
||||
btnCopy.TabIndex = 13;
|
||||
btnCopy.Text = "复制";
|
||||
btnCopy.UseVisualStyleBackColor = true;
|
||||
@@ -322,7 +323,7 @@
|
||||
// activeBtn
|
||||
//
|
||||
activeBtn.Enabled = false;
|
||||
activeBtn.Location = new Point(195, 146);
|
||||
activeBtn.Location = new Point(195, 139);
|
||||
activeBtn.Name = "activeBtn";
|
||||
activeBtn.Size = new Size(128, 40);
|
||||
activeBtn.TabIndex = 9;
|
||||
@@ -332,14 +333,14 @@
|
||||
//
|
||||
// KeySecreteTextBox
|
||||
//
|
||||
KeySecreteTextBox.Location = new Point(152, 101);
|
||||
KeySecreteTextBox.Location = new Point(152, 92);
|
||||
KeySecreteTextBox.Name = "KeySecreteTextBox";
|
||||
KeySecreteTextBox.Size = new Size(259, 23);
|
||||
KeySecreteTextBox.TabIndex = 8;
|
||||
//
|
||||
// machineTextBox
|
||||
//
|
||||
machineTextBox.Location = new Point(152, 51);
|
||||
machineTextBox.Location = new Point(152, 42);
|
||||
machineTextBox.Name = "machineTextBox";
|
||||
machineTextBox.ReadOnly = true;
|
||||
machineTextBox.Size = new Size(259, 23);
|
||||
@@ -348,7 +349,7 @@
|
||||
// machineCodeLB
|
||||
//
|
||||
machineCodeLB.AutoSize = true;
|
||||
machineCodeLB.Location = new Point(163, 51);
|
||||
machineCodeLB.Location = new Point(163, 44);
|
||||
machineCodeLB.Name = "machineCodeLB";
|
||||
machineCodeLB.Size = new Size(0, 17);
|
||||
machineCodeLB.TabIndex = 6;
|
||||
@@ -356,7 +357,7 @@
|
||||
// label6
|
||||
//
|
||||
label6.AutoSize = true;
|
||||
label6.Location = new Point(95, 101);
|
||||
label6.Location = new Point(95, 94);
|
||||
label6.Name = "label6";
|
||||
label6.Size = new Size(44, 17);
|
||||
label6.TabIndex = 5;
|
||||
@@ -365,7 +366,7 @@
|
||||
// label7
|
||||
//
|
||||
label7.AutoSize = true;
|
||||
label7.Location = new Point(95, 51);
|
||||
label7.Location = new Point(95, 44);
|
||||
label7.Name = "label7";
|
||||
label7.Size = new Size(44, 17);
|
||||
label7.TabIndex = 4;
|
||||
@@ -374,9 +375,9 @@
|
||||
// groupBox4
|
||||
//
|
||||
groupBox4.Controls.Add(logTBox);
|
||||
groupBox4.Location = new Point(618, 25);
|
||||
groupBox4.Location = new Point(570, 11);
|
||||
groupBox4.Name = "groupBox4";
|
||||
groupBox4.Size = new Size(391, 890);
|
||||
groupBox4.Size = new Size(391, 825);
|
||||
groupBox4.TabIndex = 4;
|
||||
groupBox4.TabStop = false;
|
||||
groupBox4.Text = "部署日志";
|
||||
@@ -385,7 +386,7 @@
|
||||
//
|
||||
logTBox.Location = new Point(6, 22);
|
||||
logTBox.Name = "logTBox";
|
||||
logTBox.Size = new Size(359, 862);
|
||||
logTBox.Size = new Size(359, 797);
|
||||
logTBox.TabIndex = 0;
|
||||
logTBox.Text = "";
|
||||
//
|
||||
@@ -393,13 +394,14 @@
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(1021, 946);
|
||||
ClientSize = new Size(977, 847);
|
||||
Controls.Add(groupBox4);
|
||||
Controls.Add(groupBox3);
|
||||
Controls.Add(groupBox2);
|
||||
Controls.Add(groupBox1);
|
||||
Icon = (Icon)resources.GetObject("$this.Icon");
|
||||
Name = "Main";
|
||||
Text = "EI Image Viewer";
|
||||
Text = "EI Image Viewer V1";
|
||||
Load += Main_Load;
|
||||
groupBox1.ResumeLayout(false);
|
||||
groupBox1.PerformLayout();
|
||||
|
||||
+342
-216
@@ -27,6 +27,8 @@ using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolBar;
|
||||
using System.Data.SqlTypes;
|
||||
using Serilog;
|
||||
using System.Xml.Linq;
|
||||
using System.IO;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Start
|
||||
{
|
||||
@@ -45,6 +47,8 @@ namespace Start
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.MaximizeBox = false;
|
||||
|
||||
var physicalAddressList = NetworkInterface.GetAllNetworkInterfaces().Select(t => t.GetPhysicalAddress().ToString());
|
||||
|
||||
this.machineTextBox.Text = physicalAddressList.FirstOrDefault()?.ToString();
|
||||
@@ -61,38 +65,40 @@ namespace Start
|
||||
private void connectButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
string connectionString = $"Server={serverTextBox.Text};User Id={usernameTextBox.Text};Password={passwordTextBox.Text};";
|
||||
SqlConnection connection = new SqlConnection(connectionString);
|
||||
|
||||
|
||||
try
|
||||
using (SqlConnection connection = new SqlConnection(connectionString))
|
||||
{
|
||||
connection.Open();
|
||||
try
|
||||
{
|
||||
connection.Open();
|
||||
|
||||
WinformLog("数据库连接测试成功!", Color.Green);
|
||||
WinformLog("数据库连接测试成功!", Color.Green);
|
||||
|
||||
isCanDBConfig = false;
|
||||
serverTextBox.Enabled = isCanDBConfig;
|
||||
usernameTextBox.Enabled = isCanDBConfig;
|
||||
passwordTextBox.Enabled = isCanDBConfig;
|
||||
connectButton.Enabled = false;
|
||||
isCanDBConfig = false;
|
||||
serverTextBox.Enabled = isCanDBConfig;
|
||||
usernameTextBox.Enabled = isCanDBConfig;
|
||||
passwordTextBox.Enabled = isCanDBConfig;
|
||||
connectButton.Enabled = false;
|
||||
|
||||
|
||||
selectPathBtn.Enabled = true;
|
||||
//portBtn.Enabled = true;
|
||||
//testDBBtn.Enabled = true;
|
||||
//testServicebtn.Enabled = true;
|
||||
selectPathBtn.Enabled = true;
|
||||
//portBtn.Enabled = true;
|
||||
//testDBBtn.Enabled = true;
|
||||
//testServicebtn.Enabled = true;
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
WinformLog($"数据库连接测试失败:{ex.Message}", Color.Red);
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
WinformLog($"数据库连接测试失败:{ex.Message}", Color.Red);
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
connection.Close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void portBtn_Click(object sender, EventArgs e)
|
||||
@@ -266,6 +272,15 @@ namespace Start
|
||||
await process.StandardInput.WriteLineAsync(cmd);
|
||||
await process.StandardInput.FlushAsync();
|
||||
|
||||
//while (!process.StandardOutput.EndOfStream)
|
||||
//{
|
||||
// var output = await process.StandardOutput.ReadLineAsync();
|
||||
// if (string.IsNullOrWhiteSpace(output))
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
private async void activeBtn_Click(object sender, EventArgs e)
|
||||
@@ -286,19 +301,22 @@ namespace Start
|
||||
|
||||
var deployFoder = this.folderPathTbox.Text;
|
||||
|
||||
string nginxExtractName = "nginx-1.20.1";
|
||||
string apiExtractName = "APIPublish";
|
||||
string nginxExtractName = "EIImageViewerWeb";
|
||||
string apiExtractName = "EIImageViewerService";
|
||||
|
||||
string dataExtraName = "EIImageViewerData";
|
||||
|
||||
string nginxStartPath = Path.Combine(deployFoder, @$"{nginxExtractName}\");
|
||||
var nginxConfigPath = Path.Combine(nginxStartPath, @$"conf\nginx.conf");
|
||||
|
||||
|
||||
|
||||
var apiBinPath = Path.Combine(deployFoder, "APIPublish/IRacIS.Core.API.exe");
|
||||
var apiJsonConfigPath = Path.Combine(deployFoder, "APIPublish/appsettings.CertificateApply.json");
|
||||
var apiBinPath = Path.Combine(deployFoder, "EIImageViewerService/EI_Image_Viewer.exe");
|
||||
var apiJsonConfigPath = Path.Combine(deployFoder, "EIImageViewerService/appsettings.CertificateApply.json");
|
||||
|
||||
string nginxRarFilePath = Path.Combine(AppContext.BaseDirectory, $@"deploy\nginx-1.20.1.rar"); // 要解压缩的RAR文件路径
|
||||
string apiRarFilePath = Path.Combine(AppContext.BaseDirectory, "deploy/net6.0.rar"); // 要解压缩的RAR文件路径
|
||||
string nginxRarFilePath = Path.Combine(AppContext.BaseDirectory, $@"Resource\EIImageViewerWeb.rar"); // 要解压缩的RAR文件路径
|
||||
string apiRarFilePath = Path.Combine(AppContext.BaseDirectory, "Resource/EIImageViewerService.rar"); // 要解压缩的RAR文件路径
|
||||
string dataRarFilePath = Path.Combine(AppContext.BaseDirectory, "Resource/EIImageViewerData.rar");
|
||||
|
||||
|
||||
|
||||
@@ -310,6 +328,7 @@ namespace Start
|
||||
startInfo.UseShellExecute = false;
|
||||
startInfo.CreateNoWindow = true;
|
||||
|
||||
|
||||
// 创建新进程并启动
|
||||
var process = new Process();
|
||||
process.StartInfo = startInfo;
|
||||
@@ -319,13 +338,13 @@ namespace Start
|
||||
|
||||
|
||||
|
||||
#region 解压nginx 和前端部署的文件
|
||||
|
||||
WinformLog($"开始解压 nginx 及前端部署 RAR文件", Color.Green);
|
||||
|
||||
|
||||
await Task.Run(() =>
|
||||
{
|
||||
|
||||
#region 解压nginx 和前端部署的文件
|
||||
|
||||
WinformLog($"开始解压 nginx 及前端部署压缩文件...", Color.Green);
|
||||
|
||||
string extractPath = Path.Combine(deployFoder, nginxExtractName);
|
||||
if (!Directory.Exists(extractPath))
|
||||
{
|
||||
@@ -349,25 +368,55 @@ namespace Start
|
||||
|
||||
}
|
||||
|
||||
WinformLog($"nginx 及前端部署 RAR文件已成功解压缩到: + {extractPath}", Color.Green);
|
||||
WinformLog($"nginx 及前端部署压缩文件已成功解压缩到: {extractPath}", Color.Green);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
await Task.Run( () =>
|
||||
{
|
||||
#region 解压后端部署的文件
|
||||
|
||||
#endregion
|
||||
WinformLog($"开始解压后端部署压缩文件...", Color.Green);
|
||||
|
||||
string apiExtractPath = Path.Combine(deployFoder, apiExtractName);
|
||||
|
||||
if (!Directory.Exists(apiExtractPath))
|
||||
{
|
||||
Directory.CreateDirectory(apiExtractPath);
|
||||
}
|
||||
|
||||
|
||||
using (var archive = RarArchive.Open(apiRarFilePath))
|
||||
{
|
||||
foreach (var entry in archive.Entries)
|
||||
{
|
||||
if (!entry.IsDirectory)
|
||||
{
|
||||
entry.WriteToDirectory(apiExtractPath, new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });
|
||||
}
|
||||
else
|
||||
{
|
||||
string directoryPath = Path.Combine(apiExtractPath, entry.Key);
|
||||
Directory.CreateDirectory(directoryPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region 解压后端部署的文件
|
||||
|
||||
WinformLog($"开始解压 后端部署 RAR文件", Color.Green);
|
||||
WinformLog($"后端部署压缩文件已成功解压缩到: {apiExtractPath}", Color.Green);
|
||||
|
||||
#endregion
|
||||
});
|
||||
|
||||
await Task.Run(() =>
|
||||
{
|
||||
string extractPath = Path.Combine(deployFoder, apiExtractName);
|
||||
#region 解压模板文件
|
||||
WinformLog($"开始解压部署依赖模板压缩文件...", Color.Green);
|
||||
string extractPath = Path.Combine(deployFoder, dataExtraName);
|
||||
|
||||
if (!Directory.Exists(extractPath))
|
||||
{
|
||||
@@ -375,7 +424,7 @@ namespace Start
|
||||
}
|
||||
|
||||
|
||||
using (var archive = RarArchive.Open(apiRarFilePath))
|
||||
using (var archive = RarArchive.Open(dataRarFilePath))
|
||||
{
|
||||
foreach (var entry in archive.Entries)
|
||||
{
|
||||
@@ -387,195 +436,289 @@ namespace Start
|
||||
}
|
||||
|
||||
|
||||
WinformLog($"后端部署 RAR文件已成功解压缩到: + {extractPath}", Color.Green);
|
||||
WinformLog($"依赖模板压缩文件已成功解压缩到: {extractPath}", Color.Green);
|
||||
#endregion
|
||||
|
||||
|
||||
#region 文档等资源文件
|
||||
|
||||
var otherFileFolder = Path.Combine(AppContext.BaseDirectory, $@"Resource");
|
||||
|
||||
if (Directory.Exists(otherFileFolder))
|
||||
{
|
||||
// 获取源目录下所有文件
|
||||
string[] files = Directory.GetFiles(otherFileFolder);
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
// 筛选掉文件夹
|
||||
if (!File.GetAttributes(file).HasFlag(FileAttributes.Directory))
|
||||
{
|
||||
string extension = Path.GetExtension(file);
|
||||
if (extension != ".zip" && extension != ".rar" && extension != ".7z" && extension != ".tar" && extension != ".gz")
|
||||
{
|
||||
|
||||
// 获取文件名
|
||||
string fileName = Path.GetFileName(file);
|
||||
|
||||
// 拷贝文件到目标目录
|
||||
File.Copy(file, Path.Combine(deployFoder, fileName), true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
WinformLog($"文档资源释放成功", Color.Green);
|
||||
|
||||
#endregion
|
||||
});
|
||||
|
||||
|
||||
|
||||
await Task.Run(() =>
|
||||
{
|
||||
|
||||
|
||||
#region 修改 nginx 配置文件 启动nginx
|
||||
|
||||
if (!File.Exists(nginxConfigPath))
|
||||
{
|
||||
WinformLog("预设路径不存在nginx", Color.Red);
|
||||
}
|
||||
|
||||
WinformLog("准备写入nginx配置...", Color.Green);
|
||||
|
||||
var nginxConfig = File.ReadAllText(nginxConfigPath);
|
||||
|
||||
nginxConfig = nginxConfig.Replace("9520", vuePort.ToString());
|
||||
nginxConfig = nginxConfig.Replace("7100", apiPort.ToString());
|
||||
|
||||
File.WriteAllText(nginxConfigPath, nginxConfig);
|
||||
|
||||
WinformLog("nginx部署配置写入完成", Color.Green);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 获取nginx.exe所在的目录
|
||||
|
||||
// 创建ProcessStartInfo对象,指定要启动的可执行文件及其参数
|
||||
ProcessStartInfo psi = new ProcessStartInfo(nginxStartPath + "nginx.exe");
|
||||
// 指定工作目录,即进入nginx.exe所在的目录
|
||||
psi.WorkingDirectory = nginxStartPath;
|
||||
|
||||
WinformLog(" 开始启动 nginx 服务...", Color.Green);
|
||||
// 启动可执行文件
|
||||
Process.Start(psi);
|
||||
|
||||
|
||||
|
||||
|
||||
if (Process.GetProcesses().Any(t => t.ProcessName.Contains("nginx") && t.MainModule.FileName.Contains(nginxStartPath)))
|
||||
{
|
||||
WinformLog(" nginx 服务启动成功", Color.Green);
|
||||
}
|
||||
else
|
||||
{
|
||||
WinformLog(" nginx 服务启动失败", Color.Red);
|
||||
return;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 激活
|
||||
|
||||
try
|
||||
{
|
||||
string directoryPath = @"C:\ProgramData\.xingcang";
|
||||
if (!Directory.Exists(directoryPath))
|
||||
{
|
||||
Directory.CreateDirectory(directoryPath);
|
||||
}
|
||||
|
||||
var configObj = new
|
||||
{
|
||||
key = this.machineTextBox.Text,
|
||||
value = this.KeySecreteTextBox.Text.Trim(),
|
||||
user = usernameTextBox.Text,
|
||||
server = serverTextBox.Text,
|
||||
password = passwordTextBox.Text,
|
||||
dbName = dbNameTBox.Text,
|
||||
deployFolder = deployFoder,
|
||||
nginxPath = Path.Combine(nginxStartPath, "nginx.exe"),
|
||||
apiPath = apiBinPath,
|
||||
serviceName = serviceName,
|
||||
};
|
||||
|
||||
File.WriteAllText(Path.Combine(directoryPath, "config.json"), JsonConvert.SerializeObject(configObj));
|
||||
|
||||
WinformLog("写入激活秘钥完成", Color.Green);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
WinformLog("写入激活秘钥失败,请用管理员方式启动该程序,保证程序可以", Color.Red);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
});
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region 修改 nginx 配置文件 启动nginx
|
||||
await Task.Run(async () =>{
|
||||
|
||||
|
||||
#region 创建服务
|
||||
|
||||
if (!File.Exists(nginxConfigPath))
|
||||
{
|
||||
WinformLog("预设路径不存在nginx", Color.Red);
|
||||
}
|
||||
WinformLog($"开始创建服务{serviceName}...", Color.Green);
|
||||
|
||||
var nginxConfig = File.ReadAllText(nginxConfigPath);
|
||||
var createStr = $@"sc create {serviceName} binPath= ""{apiBinPath} --urls=""http://127.0.0.1:{apiPort}"" --env CertificateApply"" DisplayName= ""{serviceDisplayName}"" start= auto";
|
||||
|
||||
nginxConfig = nginxConfig.Replace("9520", vuePort.ToString());
|
||||
nginxConfig = nginxConfig.Replace("7100", apiPort.ToString());
|
||||
// 执行 sc create 命令来创建服务
|
||||
await ProcessStandardInputAsync(process, createStr);
|
||||
|
||||
WinformLog($"服务{serviceName}创建执行结束", Color.Green);
|
||||
|
||||
|
||||
File.WriteAllText(nginxConfigPath, nginxConfig);
|
||||
|
||||
|
||||
|
||||
// 获取nginx.exe所在的目录
|
||||
|
||||
// 创建ProcessStartInfo对象,指定要启动的可执行文件及其参数
|
||||
ProcessStartInfo psi = new ProcessStartInfo(nginxStartPath + "nginx.exe");
|
||||
// 指定工作目录,即进入nginx.exe所在的目录
|
||||
psi.WorkingDirectory = nginxStartPath;
|
||||
|
||||
WinformLog(" 开始启动 nginx 服务...", Color.Green);
|
||||
// 启动可执行文件
|
||||
Process.Start(psi);
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
if (Process.GetProcesses().Any(t => t.ProcessName.Contains("nginx") && t.MainModule.FileName.Contains(nginxStartPath)))
|
||||
{
|
||||
WinformLog(" nginx 服务启动成功", Color.Green);
|
||||
}
|
||||
else
|
||||
{
|
||||
WinformLog(" nginx 服务启动失败", Color.Red);
|
||||
return;
|
||||
}
|
||||
#endregion
|
||||
#region 初始化数据库脚本
|
||||
|
||||
var configObj = new
|
||||
{
|
||||
key = this.machineTextBox.Text,
|
||||
value = this.KeySecreteTextBox.Text.Trim(),
|
||||
user = usernameTextBox.Text,
|
||||
server = serverTextBox.Text,
|
||||
password = passwordTextBox.Text,
|
||||
dbName = dbNameTBox.Text,
|
||||
};
|
||||
|
||||
File.WriteAllText($@"C:\ProgramData\.xingcang\config.json", JsonConvert.SerializeObject(configObj));
|
||||
|
||||
WinformLog("写入激活秘钥完成", Color.Green);
|
||||
WinformLog($"执行初始化数据库脚本...", Color.Green);
|
||||
//执行数据库脚本
|
||||
|
||||
|
||||
#region 部署网站配置文件写入
|
||||
await ProcessStandardInputAsync(process, $@" SQLCMD -v dbName = ""{dbNameTBox.Text}"" -i ""{AppContext.BaseDirectory}Resource\Data\dbo.sql"" ");
|
||||
|
||||
WinformLog("开始写入部署网站服务配置文件...", Color.Green);
|
||||
|
||||
var appsettingsJson = File.ReadAllText(apiJsonConfigPath);
|
||||
|
||||
// 解析 JSON 字符串
|
||||
var jObject = JObject.Parse(appsettingsJson);
|
||||
|
||||
// 获取 UpdateConfig 属性所在的节点
|
||||
var updateConfigNode = jObject["ConnectionStrings"];
|
||||
await ProcessStandardInputAsync(process, $@" SQLCMD -v dbName = ""{dbNameTBox.Text}"" -i ""{AppContext.BaseDirectory}Resource\Data\data.sql"" ");
|
||||
|
||||
|
||||
var connectionString = $"Server={serverTextBox.Text};Database={dbNameTBox.Text};User ID={usernameTextBox.Text};Password={passwordTextBox.Text};TrustServerCertificate=true";
|
||||
WinformLog($"初始化数据库脚本执行结束", Color.Green);
|
||||
|
||||
updateConfigNode["RemoteNew"] = connectionString;
|
||||
|
||||
try
|
||||
{
|
||||
using (var connection = new SqlConnection(connectionString))
|
||||
{
|
||||
connection.Open();
|
||||
|
||||
File.WriteAllText(apiJsonConfigPath, jObject.ToString());
|
||||
|
||||
}
|
||||
}
|
||||
catch (SqlException)
|
||||
{
|
||||
Console.WriteLine("连接字符串错误");
|
||||
|
||||
WinformLog($"连接字符串错误", Color.Red);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
WinformLog("部署网站服务配置文件写入并测试OK", Color.Green);
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
|
||||
var createStr = $@"sc create {serviceName} binPath= ""{apiBinPath} --urls=""http://127.0.0.1:{apiPort}"" --env CertificateApply"" DisplayName= ""{serviceDisplayName}"" start= auto";
|
||||
#region 部署网站配置文件写入
|
||||
|
||||
WinformLog("开始写入部署网站服务配置文件...", Color.Green);
|
||||
|
||||
var appsettingsJson = File.ReadAllText(apiJsonConfigPath);
|
||||
|
||||
// 解析 JSON 字符串
|
||||
var jObject = JObject.Parse(appsettingsJson);
|
||||
|
||||
// 获取 UpdateConfig 属性所在的节点
|
||||
var updateConfigNode = jObject["ConnectionStrings"];
|
||||
|
||||
|
||||
#region 创建服务
|
||||
var connectionString = $"Server={serverTextBox.Text};Database={dbNameTBox.Text};User ID={usernameTextBox.Text};Password={passwordTextBox.Text};TrustServerCertificate=true";
|
||||
|
||||
|
||||
|
||||
|
||||
// 删除已存在的服务
|
||||
|
||||
|
||||
//await ProcessStandardInputAsync(process, $"sc delete {serviceName}");
|
||||
|
||||
//Log($"删除服务{serviceName}...", Color.Green);
|
||||
|
||||
// 执行 sc create 命令来创建服务
|
||||
await ProcessStandardInputAsync(process, createStr);
|
||||
WinformLog($"创建服务{serviceName}...", Color.Green);
|
||||
|
||||
|
||||
WinformLog($"执行初始化数据库脚本...", Color.Green);
|
||||
//执行数据库脚本
|
||||
|
||||
//await ProcessStandardInputAsync(process, Path.Combine(AppContext.BaseDirectory, "deploy/sql/bin.bat"));
|
||||
|
||||
await ProcessStandardInputAsync(process, $@" SQLCMD -v dbName = ""{dbNameTBox.Text}"" -i {AppContext.BaseDirectory}deploy\sql\dbo.sql ");
|
||||
|
||||
await ProcessStandardInputAsync(process, $@" SQLCMD -v dbName = ""{dbNameTBox.Text}"" -i {AppContext.BaseDirectory}deploy\sql\data.sql ");
|
||||
|
||||
|
||||
WinformLog($"初始化数据库脚本执行结束", Color.Green);
|
||||
|
||||
// 执行 sc start 启动服务
|
||||
|
||||
WinformLog($"启动部署的后端服务...", Color.Green);
|
||||
await ProcessStandardInputAsync(process, $"sc start {serviceName}");
|
||||
|
||||
// 关闭进程流并等待进程退出
|
||||
process.StandardInput.Close();
|
||||
process.WaitForExit();
|
||||
|
||||
ServiceController sc = new ServiceController(serviceName);
|
||||
if (sc.Status == ServiceControllerStatus.Running)
|
||||
{
|
||||
WinformLog($"后端服务启动成功", Color.Green);
|
||||
|
||||
|
||||
WinformLog($"部署工作已完成", Color.Green);
|
||||
updateConfigNode["RemoteNew"] = connectionString;
|
||||
|
||||
try
|
||||
{
|
||||
WinformLog($"现在打开浏览器...", Color.Green);
|
||||
// Use ProcessStartInfo class
|
||||
var start = new ProcessStartInfo($"http://127.0.0.1:{vuePort}")
|
||||
using (var connection = new SqlConnection(connectionString))
|
||||
{
|
||||
UseShellExecute = true,
|
||||
Verb = "open"
|
||||
};
|
||||
Process.Start(start);
|
||||
connection.Open();
|
||||
|
||||
File.WriteAllText(apiJsonConfigPath, jObject.ToString());
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch (SqlException)
|
||||
{
|
||||
// Handle exception
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
WinformLog($"连接字符串错误", Color.Red);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
|
||||
WinformLog("部署网站服务配置文件写入并测试OK", Color.Green);
|
||||
|
||||
#endregion
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
WinformLog($"后端服务启动失败", Color.Red);
|
||||
}
|
||||
#region 启动后端服务
|
||||
|
||||
WinformLog($"启动部署的后端服务...", Color.Green);
|
||||
|
||||
await ProcessStandardInputAsync(process, $"sc start {serviceName}");
|
||||
|
||||
// 关闭进程流并等待进程退出
|
||||
process.StandardInput.Close();
|
||||
process.WaitForExit();
|
||||
|
||||
|
||||
|
||||
ServiceController sc = new ServiceController(serviceName);
|
||||
|
||||
if (sc.Status != ServiceControllerStatus.Running)
|
||||
{
|
||||
sc.Refresh();
|
||||
|
||||
await Task.Delay(3000);
|
||||
|
||||
sc.Refresh();
|
||||
|
||||
await Task.Delay(2000);
|
||||
}
|
||||
|
||||
|
||||
if (sc.Status == ServiceControllerStatus.Running)
|
||||
{
|
||||
WinformLog($"后端服务启动成功", Color.Green);
|
||||
|
||||
|
||||
WinformLog($"部署工作已完成", Color.Green);
|
||||
|
||||
try
|
||||
{
|
||||
WinformLog($"现在准备打开浏览器...", Color.Green);
|
||||
// Use ProcessStartInfo class
|
||||
var start = new ProcessStartInfo($"http://127.0.0.1:{vuePort}")
|
||||
{
|
||||
UseShellExecute = true,
|
||||
Verb = "open"
|
||||
};
|
||||
Process.Start(start);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle exception
|
||||
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WinformLog($"后端服务启动失败,可以手动启动{serviceDisplayName}尝试", Color.Red);
|
||||
}
|
||||
|
||||
#endregion
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
private async void selectPathBtn_Click(object sender, EventArgs e)
|
||||
@@ -589,41 +732,7 @@ namespace Start
|
||||
|
||||
WinformLog($"部署路径选择成功", Color.Green);
|
||||
|
||||
#region 测试 停止Nginx
|
||||
|
||||
var deployFoder = this.folderPathTbox.Text;
|
||||
|
||||
string nginxExtractName = "nginx-1.20.1";
|
||||
|
||||
string nginxStartPath = Path.Combine(deployFoder, @$"{nginxExtractName}\");
|
||||
|
||||
|
||||
#region 创建进程执行命令
|
||||
|
||||
Process process = new Process();
|
||||
process.StartInfo.FileName = "cmd.exe";
|
||||
process.StartInfo.RedirectStandardInput = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.CreateNoWindow = true; // 不创建新窗口
|
||||
process.Start();
|
||||
|
||||
var proList = Process.GetProcesses().Where(t => t.ProcessName.Contains("nginx") && t.MainModule.FileName.Contains(nginxStartPath));
|
||||
|
||||
foreach (var item in proList)
|
||||
{
|
||||
item.Kill();
|
||||
}
|
||||
|
||||
|
||||
await ProcessStandardInputAsync(process, $"sc stop {serviceNameTBox.Text}");
|
||||
await ProcessStandardInputAsync(process, $"sc delete {serviceNameTBox.Text}");
|
||||
|
||||
process.StandardInput.Close();
|
||||
process.WaitForExit();
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -639,6 +748,23 @@ namespace Start
|
||||
Serilog.Log.Logger = new LoggerConfiguration()
|
||||
.WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
|
||||
.CreateLogger();
|
||||
|
||||
|
||||
|
||||
|
||||
// Check if any version of SQL Server is installed
|
||||
RegistryKey sqlServerKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server");
|
||||
|
||||
if (sqlServerKey != null)
|
||||
{
|
||||
WinformLog("当前系统SQL Server 已安装", Color.Green);
|
||||
}
|
||||
else
|
||||
{
|
||||
WinformLog("SQL Server 未安装,请安装后再运行该部署程序", Color.Red);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+137
@@ -60,4 +60,141 @@
|
||||
<metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
QHW69f8D447Kbv4U1JoAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+16
-10
@@ -6,29 +6,35 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Platforms>AnyCPU;x86</Platforms>
|
||||
<Platforms>AnyCPU;</Platforms>
|
||||
<ApplicationIcon>favicon.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="deploy\net6.0.rar" />
|
||||
<None Remove="deploy\nginx-1.20.1.rar" />
|
||||
<None Remove="Resource\EIImageViewerData.rar" />
|
||||
<None Remove="Resource\EIImageViewerService.rar" />
|
||||
<None Remove="Resource\EIImageViewerWeb.rar" />
|
||||
<None Remove="ServiceConfig.Json" />
|
||||
<None Remove="deploy\sql\data.sql" />
|
||||
<None Remove="deploy\sql\dbo.sql" />
|
||||
<None Remove="deploy\sql\startNginx.bat" />
|
||||
<None Remove="Resource\Data\data.sql" />
|
||||
<None Remove="Resource\Data\dbo.sql" />
|
||||
<None Remove="Resource\Data\startNginx.bat" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="deploy\net6.0.rar">
|
||||
<Content Include="favicon.ico" />
|
||||
<Content Include="Resource\EIImageViewerData.rar">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="deploy\nginx-1.20.1.rar">
|
||||
<Content Include="Resource\EIImageViewerService.rar">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="deploy\sql\data.sql">
|
||||
<Content Include="Resource\EIImageViewerWeb.rar">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="deploy\sql\dbo.sql">
|
||||
<Content Include="Resource\Data\data.sql">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resource\Data\dbo.sql">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 7.7 KiB |
Reference in New Issue
Block a user