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()
- {
-
- }
- }
-}