From caeaad9e4372dc5565d6747b4bc290afa0692ea2 Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Wed, 26 Jun 2024 01:43:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docs/1.0项目管理.dib | 2 +- Docs/1.3.0.基础使用.管理客户端.ipynb | 42 +++++++- HttpClientStudy.Core/Utilities/AppUtility.cs | 4 +- HttpClientStudy.Core/Utilities/CmdUtility.cs | 49 --------- .../Utilities/DotnetCommondUtility.cs | 99 +++++++++++++------ .../Utilities/StartupUtility.cs | 53 ---------- HttpClientStudy.UnitTest/TempTest.cs | 28 +----- .../UtilitiesTest/AppUtilityTest.cs | 2 +- .../UtilitiesTest/CmdUtilityTest.cs | 29 ------ .../UtilitiesTest/DotnetCommondUtilityTest.cs | 21 +--- .../UtilitiesTest/StartupUtilityTest.cs | 25 ----- 11 files changed, 113 insertions(+), 241 deletions(-) delete mode 100644 HttpClientStudy.Core/Utilities/CmdUtility.cs delete mode 100644 HttpClientStudy.UnitTest/UtilitiesTest/CmdUtilityTest.cs delete mode 100644 HttpClientStudy.UnitTest/UtilitiesTest/StartupUtilityTest.cs diff --git a/Docs/1.0项目管理.dib b/Docs/1.0项目管理.dib index 09f768f..03ccc24 100644 --- a/Docs/1.0项目管理.dib +++ b/Docs/1.0项目管理.dib @@ -57,7 +57,7 @@ $WebAppProcName ="HttpClientStudy.WebApp"; $WebAppProc = Get-Process $WebAppProcName -ErrorAction Ignore if($null -eq $WebAppProc) { - Write-Host "进程没有找到,可能已经" + Write-Host "进程没有找到,可能已经退出" } else { $WebAppProc.Kill(); diff --git a/Docs/1.3.0.基础使用.管理客户端.ipynb b/Docs/1.3.0.基础使用.管理客户端.ipynb index 2463b8d..b22a6c6 100644 --- a/Docs/1.3.0.基础使用.管理客户端.ipynb +++ b/Docs/1.3.0.基础使用.管理客户端.ipynb @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "dotnet_interactive": { "language": "csharp" @@ -37,7 +37,40 @@ "languageId": "polyglot-notebook" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Installed Packages
  • Microsoft.Extensions.DependencyInjection, 8.0.0
  • System.Net.Http.Json, 8.0.0
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "启动WebApi项目\r\n" + ] + }, + { + "data": { + "text/plain": [ + "C:\\Users\\ruyu\\.nuget\\packages\\microsoft.dotnet-interactive\\1.0.522904\\tools\\net8.0\\any\\Publish\\HttpClientStudy.WebApp\\HttpClientStudy.WebApp.dll" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "命令已在新窗口执行!\r\n" + ] + } + ], "source": [ "//全局设置,行运行一次,为后续准备\n", "#r \"nuget:System.Net.Http.Json\"\n", @@ -52,7 +85,10 @@ "\n", "//启动已发布的WebApi项目\n", "Console.WriteLine(\"启动WebApi项目\");\n", - "var startMessage = DotnetCommondUtility.ExecuteCommand(\"exec\",\"./Publish/HttpClientStudy.WebApp/HttpClientStudy.WebApp.dll\");\n", + "var workDir = Environment.CurrentDirectory;\n", + "var fullPath = System.IO.Path.GetFullPath(\"./Publish/HttpClientStudy.WebApp/HttpClientStudy.WebApp.dll\",workDir);\n", + "fullPath.Display();\n", + "var startMessage = DotnetCommondUtility.ExecuteCommand(\"exec\",fullPath,true);\n", "Console.WriteLine(startMessage);\n" ] }, diff --git a/HttpClientStudy.Core/Utilities/AppUtility.cs b/HttpClientStudy.Core/Utilities/AppUtility.cs index 82c8ada..1ba33fc 100644 --- a/HttpClientStudy.Core/Utilities/AppUtility.cs +++ b/HttpClientStudy.Core/Utilities/AppUtility.cs @@ -56,10 +56,10 @@ namespace HttpClientStudy.Core.Utilities {"Assembly.GetEntryAssembly().Location",("入口程序集的路径",Assembly.GetEntryAssembly()?.Location) }, //已过时:当前程序集的CodeBase路径,可能为file URI格式 - {"Assembly.GetExecutingAssembly().CodeBase",("当前程序集的CodeBase路径",Assembly.GetExecutingAssembly()?.CodeBase) }, + //{"Assembly.GetExecutingAssembly().CodeBase",("当前程序集的CodeBase路径",Assembly.GetExecutingAssembly()?.CodeBase) }, //已过时:入口程序集的CodeBase路径,可能为file URI格式 - {"Assembly.GetEntryAssembly().CodeBase",("入口程序集的CodeBase路径",Assembly.GetEntryAssembly()?.CodeBase) }, + //{"Assembly.GetEntryAssembly().CodeBase",("入口程序集的CodeBase路径",Assembly.GetEntryAssembly()?.CodeBase) }, }; return pathDic; diff --git a/HttpClientStudy.Core/Utilities/CmdUtility.cs b/HttpClientStudy.Core/Utilities/CmdUtility.cs deleted file mode 100644 index 0dc73cb..0000000 --- a/HttpClientStudy.Core/Utilities/CmdUtility.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using System.IO; -using System.Diagnostics; - -namespace HttpClientStudy.Core.Utilities -{ - /// - /// cmd命令行工具类 - /// - public static class CmdUtility - { - /// - /// 执行cmd命令 - /// - /// - /// 命令行输出结果 - public static string RunCmd(string cmd) - { - string cmdResult = string.Empty; - - // 创建一个新的ProcessStartInfo对象 - ProcessStartInfo startInfo = new ProcessStartInfo() - { - FileName = "cmd.exe", - Arguments = $"/u /k start cmd.exe /u /k {cmd}", - //RedirectStandardOutput = true, // 重定向标准输出 - //StandardOutputEncoding = Encoding.UTF8, - UseShellExecute = true, // 不使用系统外壳程序启动 - CreateNoWindow = false // 不创建新窗口 - }; - - // 启动进程 - using (Process? process = Process.Start(startInfo)) - { - if (process == null) - { - return "执行命令出错"; - } - } - - return cmdResult; - } - } -} diff --git a/HttpClientStudy.Core/Utilities/DotnetCommondUtility.cs b/HttpClientStudy.Core/Utilities/DotnetCommondUtility.cs index e42559c..c43f6eb 100644 --- a/HttpClientStudy.Core/Utilities/DotnetCommondUtility.cs +++ b/HttpClientStudy.Core/Utilities/DotnetCommondUtility.cs @@ -16,45 +16,81 @@ namespace HttpClientStudy.Core.Utilities /// 执行dotnet命令 /// /// 命令 - /// 命令参数 - /// 是否等待退出 + /// 命令参数 + /// 新窗口执行命令 /// 命令行输出文本 - public static string ExecuteCommand(string command, string arguments = "", bool waitForExit=false) + public static string ExecuteCommand(string command, string argument = "", bool newWindow = false) { string output = ""; try { - ProcessStartInfo startInfo = new ProcessStartInfo() + if (newWindow) { - FileName = "dotnet", - Arguments = $"{command} {arguments}", - RedirectStandardOutput = true, - //StandardOutputEncoding = Encoding.UTF8, - RedirectStandardError = true, - //StandardErrorEncoding = Encoding.UTF8, - RedirectStandardInput = false, - //StandardInputEncoding = Encoding.UTF8, - UseShellExecute = false, - CreateNoWindow = false, - }; - - - Process process = new Process() - { - StartInfo = startInfo, - }; - - process.Start(); - if (startInfo.RedirectStandardInput) - { - process.StandardInput.Write(""); + ProcessStartInfo startInfo = new ProcessStartInfo() + { + FileName = "pwsh.exe", + Arguments = $" Start-Process -FilePath 'dotnet' {command} {argument}", + //RedirectStandardOutput = true, + //StandardOutputEncoding = Encoding.UTF8, + //RedirectStandardError = true, + //StandardErrorEncoding = Encoding.UTF8, + //RedirectStandardInput = false, + //StandardInputEncoding = Encoding.UTF8, + UseShellExecute = false, + CreateNoWindow = false, + }; + + + Process process = new Process() + { + StartInfo = startInfo, + }; + + process.Start(); + + output = "命令已在新窗口执行!"; } - - output = process.StandardOutput.ReadToEnd(); - - if (waitForExit) + else { + ProcessStartInfo startInfo = new ProcessStartInfo() + { + FileName = "dotnet", + Arguments = $"{command} {argument}", + RedirectStandardOutput = true, + StandardOutputEncoding = Encoding.UTF8, + RedirectStandardError = true, + StandardErrorEncoding = Encoding.UTF8, + //RedirectStandardInput = false, + //StandardInputEncoding = Encoding.UTF8, + + //启用内核模式时,不能重定向输出 + UseShellExecute = false, + + //不创建新窗口 + CreateNoWindow = false, + }; + + Process process = new Process() + { + StartInfo = startInfo, + }; + + //处理输出 + process.OutputDataReceived += (sender, args) => + { + if (!string.IsNullOrEmpty(args.Data)) + { + output += args.Data; + } + }; + + process.Start(); + + //开始异步读取输出 + process.BeginOutputReadLine(); + + //等待里程结束 process.WaitForExit(); } } @@ -66,7 +102,6 @@ namespace HttpClientStudy.Core.Utilities return output; } - /// /// 新窗口启动WebApp项目 /// @@ -107,7 +142,7 @@ namespace HttpClientStudy.Core.Utilities } /// - /// 启动新窗口,执行指定文件 + /// 停止WebAPI项目 /// /// 包含全路径的可执行文件 /// diff --git a/HttpClientStudy.Core/Utilities/StartupUtility.cs b/HttpClientStudy.Core/Utilities/StartupUtility.cs index aaa3dd5..c6ccee5 100644 --- a/HttpClientStudy.Core/Utilities/StartupUtility.cs +++ b/HttpClientStudy.Core/Utilities/StartupUtility.cs @@ -66,59 +66,6 @@ namespace HttpClientStudy.Core.Utilities } - public static void StartWebApiDll(string dllPath) - { - string projectAndMutexName = WebApiConfigManager.GetWebApiConfigOption().CurrentValue.WebAppMutexName; - string dllBasePath = Environment.CurrentDirectory; - Console.WriteLine($"根目录为:{dllBasePath}"); - string dllFullPath = string.Empty; - if (Path.IsPathRooted(dllPath)) - { - dllFullPath = dllPath; - } - else - { - dllPath = dllPath.TrimStart('.').TrimStart('\\', '/'); - dllFullPath = Path.GetFullPath(Path.Combine(dllBasePath, dllPath)); - } - - - //webapi项目不在运行状态则启动webapi项目 - if (webAppIsRunningByMutex() == false) - { - Console.WriteLine($"启动程序为:{dllFullPath}"); - - //启动命令信息 - var prossInfo = new System.Diagnostics.ProcessStartInfo("dotnet", $"{dllFullPath}") - { - UseShellExecute = true, - CreateNoWindow = false, - RedirectStandardOutput = false - }; - - //启动 - System.Diagnostics.Process.Start(prossInfo); - } - - //由互斥锁判断 - bool webAppIsRunningByMutex() - { - bool createdResult = true; - - //创建互斥锁 - using (var mutex = new Mutex(true, projectAndMutexName, out createdResult)) - { - if (createdResult) - { - mutex.ReleaseMutex(); - } - } - - //互斥锁是否创建成功 - return !createdResult; - } - } - /// /// 关闭webapi项目 /// diff --git a/HttpClientStudy.UnitTest/TempTest.cs b/HttpClientStudy.UnitTest/TempTest.cs index 2aa8758..eed1aa1 100644 --- a/HttpClientStudy.UnitTest/TempTest.cs +++ b/HttpClientStudy.UnitTest/TempTest.cs @@ -20,33 +20,9 @@ namespace HttpClientStudy.UnitTest } [Fact] - public async Task TestAsync() + public void Test() { - var ips = await Dns.GetHostAddressesAsync("localhost"); - string firstIp = ips?.FirstOrDefault()?.ToString() ?? string.Empty; - - //自定义行为 - var socketsHandler = new SocketsHttpHandler - { - PooledConnectionLifetime = TimeSpan.FromSeconds(1), - PooledConnectionIdleTimeout = TimeSpan.FromSeconds(1), - MaxConnectionsPerServer = 10 - }; - - var client = new HttpClient(socketsHandler); - - for (var i = 0; i < 3; i++) - { - if (i > 0) - { - await Task.Delay(2000); - } - await client.GetAsync("http://localhost"); - } - - var queryNetwork = CmdUtility.RunCmd($"netstat -ano | findstr {firstIp}"); - - _output.WriteLine(queryNetwork); + } } } diff --git a/HttpClientStudy.UnitTest/UtilitiesTest/AppUtilityTest.cs b/HttpClientStudy.UnitTest/UtilitiesTest/AppUtilityTest.cs index ac78fb4..f09ce85 100644 --- a/HttpClientStudy.UnitTest/UtilitiesTest/AppUtilityTest.cs +++ b/HttpClientStudy.UnitTest/UtilitiesTest/AppUtilityTest.cs @@ -17,7 +17,7 @@ namespace HttpClientStudy.UnitTest.UtilitiesTest } [Fact] - public void Test() + public void ApplicationPaths_Test() { var dic = AppUtility.GetApplicationPaths(); diff --git a/HttpClientStudy.UnitTest/UtilitiesTest/CmdUtilityTest.cs b/HttpClientStudy.UnitTest/UtilitiesTest/CmdUtilityTest.cs deleted file mode 100644 index ca14a5e..0000000 --- a/HttpClientStudy.UnitTest/UtilitiesTest/CmdUtilityTest.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using HttpClientStudy.Core.Utilities; - -namespace HttpClientStudy.UnitTest.UtilitiesTest -{ - public class CmdUtilityTest - { - private readonly ITestOutputHelper _output; - public CmdUtilityTest(ITestOutputHelper testOutput) - { - _output = testOutput; - } - - [Fact] - public void Test() - { - string cmd = "tasklist"; - - var result = CmdUtility.RunCmd(cmd); - - _output.WriteLine(result); - } - } -} diff --git a/HttpClientStudy.UnitTest/UtilitiesTest/DotnetCommondUtilityTest.cs b/HttpClientStudy.UnitTest/UtilitiesTest/DotnetCommondUtilityTest.cs index c56186f..2993614 100644 --- a/HttpClientStudy.UnitTest/UtilitiesTest/DotnetCommondUtilityTest.cs +++ b/HttpClientStudy.UnitTest/UtilitiesTest/DotnetCommondUtilityTest.cs @@ -35,26 +35,7 @@ namespace HttpClientStudy.UnitTest.UtilitiesTest [Fact] public void Help_Test() { - var result = DotnetCommondUtility.ExecuteCommand("", "--help"); - - _output.WriteLine(result); - } - - [Fact] - public void StartApp_Test() - { - var webapiDll = Path.GetFullPath("../../../../Docs/Publish/HttpClientStudy.WebApp/HttpClientStudy.WebApp.exe", Environment.CurrentDirectory); - - var result = DotnetCommondUtility.RunWebApp(webapiDll,"--urls=http://localhost:8899"); - - _output.WriteLine(result); - } - - [Fact] - public void StopApp_Test() - { - - var result = DotnetCommondUtility.SopWebApp(); + var result = DotnetCommondUtility.ExecuteCommand("", "--help",true); _output.WriteLine(result); } diff --git a/HttpClientStudy.UnitTest/UtilitiesTest/StartupUtilityTest.cs b/HttpClientStudy.UnitTest/UtilitiesTest/StartupUtilityTest.cs deleted file mode 100644 index 03c7d45..0000000 --- a/HttpClientStudy.UnitTest/UtilitiesTest/StartupUtilityTest.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using HttpClientStudy.Core.Utilities; - -namespace HttpClientStudy.UnitTest.UtilitiesTest -{ - public class StartupUtilityTest - { - private readonly ITestOutputHelper _output; - public StartupUtilityTest(ITestOutputHelper testOutput) - { - _output = testOutput; - } - - [Fact] - public void StartWebApiDll_Test() - { - - } - } -}