修改
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,152 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Data.SqlTypes;
|
||||
using System.Diagnostics;
|
||||
|
||||
async Task ProcessStandardInputAsync(Process process, string cmd, string workDirectory = "")
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(workDirectory))
|
||||
{
|
||||
process.StartInfo.WorkingDirectory = workDirectory;
|
||||
}
|
||||
|
||||
await process.StandardInput.WriteLineAsync(cmd);
|
||||
await process.StandardInput.FlushAsync();
|
||||
|
||||
while (!process.StandardOutput.EndOfStream)
|
||||
{
|
||||
var output = await process.StandardOutput.ReadLineAsync();
|
||||
if (string.IsNullOrWhiteSpace(output))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DeleteFolderContents(string path)
|
||||
{
|
||||
DirectoryInfo directory = new DirectoryInfo(path);
|
||||
|
||||
foreach (FileInfo file in directory.GetFiles())
|
||||
{
|
||||
file.Delete();
|
||||
}
|
||||
|
||||
foreach (DirectoryInfo subDirectory in directory.GetDirectories())
|
||||
{
|
||||
subDirectory.Delete(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
var configFolder = $@"C:\ProgramData\.xingcang\";
|
||||
|
||||
var configPath =Path.Combine(configFolder, "config.json") ;
|
||||
if (!File.Exists(configPath))
|
||||
{
|
||||
Console.WriteLine("当前系统未部署影像系统,无须卸载");
|
||||
Console.ReadLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("警告:卸载部署的网站,会将数据库,部署的网站,以及运行的所有数据记录都会清除,该操作非常慎重,请确保你已知晓该后果");
|
||||
Console.WriteLine(" 您确定要卸载该程序吗?(Y/N)");
|
||||
Console.ResetColor();
|
||||
|
||||
string confirm = Console.ReadLine();
|
||||
if (confirm.ToUpper() == "Y")
|
||||
{
|
||||
// 执行卸载操作
|
||||
try
|
||||
{
|
||||
Console.WriteLine("开始读取激活信息...");
|
||||
|
||||
var appsettingsJson = File.ReadAllText(configPath);
|
||||
|
||||
// 解析 JSON 字符串
|
||||
var jObject = JObject.Parse(appsettingsJson);
|
||||
|
||||
|
||||
var configObj = new
|
||||
{
|
||||
key = jObject["key"].ToString(),
|
||||
value = jObject["value"].ToString(),
|
||||
user = jObject["user"].ToString(),
|
||||
server = jObject["server"].ToString(),
|
||||
password = jObject["password"].ToString(),
|
||||
dbName = jObject["dbName"].ToString(),
|
||||
deployFolder = jObject["deployFolder"].ToString(),
|
||||
nginxPath = jObject["nginxPath"].ToString(),
|
||||
apiPath = jObject["apiPath"].ToString(),
|
||||
serviceName = jObject["serviceName"].ToString(),
|
||||
};
|
||||
Console.WriteLine("激活信息读取完毕,开始准备卸载...");
|
||||
|
||||
|
||||
|
||||
Process process = new Process();
|
||||
process.StartInfo.FileName = "cmd.exe";
|
||||
process.StartInfo.RedirectStandardInput = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
//process.StartInfo.CreateNoWindow = false; // 不创建新窗口
|
||||
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.Start();
|
||||
|
||||
Console.WriteLine("停止nginx进程...");
|
||||
|
||||
var proList = Process.GetProcesses().Where(t => t.ProcessName.Contains("nginx") && t.MainModule.FileName.Contains(configObj.nginxPath));
|
||||
|
||||
foreach (var item in proList)
|
||||
{
|
||||
item.Kill();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Console.WriteLine("停止后端服务...");
|
||||
|
||||
await ProcessStandardInputAsync(process, $"sc stop {configObj.serviceName}");
|
||||
await ProcessStandardInputAsync(process, $"sc delete {configObj.serviceName}");
|
||||
|
||||
|
||||
Console.WriteLine("数据库若被其他进程或者连接正在使用,将会删除失败,您可以卸载完后手动删除遗留的数据库");
|
||||
Console.WriteLine("执行删除数据库命令...");
|
||||
await ProcessStandardInputAsync(process, $@" SQLCMD -S {configObj.server} -U {configObj.user} -P {configObj.password} -Q ""DROP DATABASE {configObj.dbName}"" ");
|
||||
|
||||
|
||||
process.StandardInput.Close();
|
||||
process.WaitForExit();
|
||||
|
||||
Console.WriteLine("删除部署文件夹下的所有内容...");
|
||||
DeleteFolderContents(configObj.deployFolder);
|
||||
|
||||
|
||||
//DeleteFolderContents(configFolder);
|
||||
|
||||
Console.WriteLine("删除激活信息...");
|
||||
|
||||
Console.WriteLine("卸载结束");
|
||||
Console.ReadLine();
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Console.WriteLine("程序出错,卸载失败:" + ex.Message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<ApplicationIcon>Ncrow-Mega-Pack-2-Uninstall-Tool.256.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="Ncrow-Mega-Pack-2-Uninstall-Tool.256.ico" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user