C#如何调用执行命令行窗口(CMD)
一、引言
在 C# 的编程世界里,我们常常会遇到需要与操作系统底层进行交互的场景。这时,调用命令行窗口(CMD)就成为了一个强大的工具。无论是自动化日常任务,还是执行外部程序和批处理文件,通过 C# 调用 CMD 都能为我们提供极大的便利,极大地拓展了 C# 应用程序的功能边界。今天,就让我们一起深入探索 C# 中调用执行 CMD 的方法与技巧。
二、为什么要在 C# 中调用 CMD
在 C# 的实际应用开发中,调用 CMD 命令行有着诸多重要且实际的用途。
(一)启动其他程序
在开发过程中,我们常常需要在 C# 程序中启动其他外部程序。例如,当开发一款集成开发环境(IDE)辅助工具时,可能需要在特定操作后自动启动 Visual Studio、Notepad++ 等文本编辑器 。通过调用 CMD 命令行,使用start命令加上目标程序的路径,即可轻松实现这一功能。示例代码如下:
using System;
using System.Diagnostics;class Program
{static void Main(){ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.Arguments = "/C start C:\\Program Files\\Notepad++\\notepad++.exe";startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;using (Process process = new Process()){process.StartInfo = startInfo;process.Start();process.WaitForExit();}}
}
(二)执行批处理脚本
批处理脚本是一种强大的工具,它能够将一系列的命令组合在一起按顺序执行。在 C# 中调用 CMD 执行批处理脚本,可以实现复杂的系统操作自动化。比如,在项目部署过程中,可能需要执行一系列的脚本,包括安装依赖项、配置环境变量、启动服务等。通过编写一个批处理脚本,然后在 C# 程序中调用 CMD 来执行该脚本,就能一次性完成这些繁琐的操作。如下是一个执行批处理脚本的简单示例:
using System;
using System.Diagnostics;class Program
{static void Main(){ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.Arguments = "/C C:\\Scripts\\deploy.bat";startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;using (Process process = new Process()){process.StartInfo = startInfo;process.Start();process.WaitForExit();}}
}
(三)调用外部工具
在软件开发中,我们常常会依赖各种外部工具来完成特定的任务,如代码格式化工具、代码质量检测工具、数据库管理工具等。这些工具通常提供了命令行接口,方便在自动化流程中使用。通过 C# 调用 CMD 命令行,我们可以将这些外部工具集成到我们的应用程序中,实现更高效的工作流程。例如,使用dotnet-format工具对 C# 代码进行格式化,示例代码如下:
using System;
using System.Diagnostics;class Program
{static void Main(){ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.Arguments = "/C dotnet-format C:\\Projects\\MyProject -v";startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;using (Process process = new Process()){process.StartInfo = startInfo;process.Start();process.WaitForExit();}}
}
通过上述场景可以看出,在 C# 中调用 CMD 命令行,能够极大地扩展应用程序的功能边界,提升开发效率和应用程序的实用性。
三、使用 C# 调用 CMD 的技术原理
在 C# 中,调用 CMD 命令行的核心技术是利用System.Diagnostics.Process类 。这个类提供了启动、管理和监控外部进程的功能,通过创建Process类的实例,并设置其相关属性,我们可以指示该进程执行 CMD 程序,并传递相应的命令参数。
(一)创建进程实例
首先,我们需要创建一个Process类的实例,这将代表我们要启动的外部进程。代码如下:
Process process = new Process();
(二)设置启动信息
接下来,我们要设置该进程的启动信息,包括要执行的程序路径、传递的参数等。对于调用 CMD,我们需要将FileName属性设置为cmd.exe,并在Arguments属性中指定要执行的 CMD 命令。同时,为了实现更灵活的控制,如获取命令执行的输出结果,我们还需要设置其他相关属性。示例代码如下:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C dir";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.CreateNoWindow = true;
process.StartInfo = startInfo;
在这段代码中:
-
startInfo.FileName = “cmd.exe”;:指定要启动的程序是cmd.exe,即命令行解释器。
-
startInfo.Arguments = “/C dir”;:设置传递给cmd.exe的参数。/C表示执行完命令后关闭 CMD 窗口,dir是具体要执行的命令,用于列出当前目录下的文件和文件夹。
-
startInfo.UseShellExecute = false;:表示不使用操作系统的外壳程序来启动进程,这是为了能够重定向输入输出流。
-
startInfo.RedirectStandardOutput = true;:启用标准输出流的重定向,这样我们就可以获取 CMD 命令执行后的输出结果。
-
startInfo.CreateNoWindow = true;:表示启动进程时不显示新的窗口,在某些情况下,我们不希望 CMD 窗口界面出现,以免影响用户体验或干扰程序的自动化流程。
(三)启动进程并获取输出
设置好启动信息后,我们就可以启动进程,并通过重定向的输出流获取命令执行的结果。代码如下:
process.Start();
using (StreamReader reader = process.StandardOutput)
{string result = reader.ReadToEnd();Console.WriteLine(result);
}
process.WaitForExit();
在这段代码中:
-
process.Start();:启动进程,执行cmd.exe并传递指定的参数。
-
using (StreamReader reader = process.StandardOutput):创建一个StreamReader对象,用于读取进程的标准输出流。
-
string result = reader.ReadToEnd();:读取输出流的全部内容,并将其存储在result字符串变量中。
-
Console.WriteLine(result);:将获取到的命令执行结果输出到控制台,以便查看。
-
process.WaitForExit();:等待进程执行完毕并退出,确保在继续执行后续代码之前,CMD 命令已经完全执行完成。
通过以上步骤,我们利用System.Diagnostics.Process类实现了在 C# 中调用 CMD 命令行,并执行命令、获取输出的功能。这种方式为我们在 C# 应用程序中与操作系统进行交互提供了强大的手段。
四、具体实现步骤
4.1 引入必要的命名空间
在 C# 中使用System.Diagnostics.Process类来调用 CMD 命令行,首先需要引入System.Diagnostics命名空间。命名空间就像是一个 “代码仓库” 的分区,它将相关的类、接口、结构体等代码元素组织在一起,避免不同代码库中相同名称的元素发生冲突。System.Diagnostics命名空间包含了许多用于调试和跟踪应用程序的类,其中Process类就是我们用于启动和控制外部进程(如 CMD)的关键工具。
在代码文件的开头,使用using关键字引入该命名空间,如下所示:
using System;
using System.Diagnostics;
这样,在后续的代码中,我们就可以直接使用System.Diagnostics命名空间下的Process类及其相关成员,而无需每次都指定完整的命名空间路径。
4.2 创建一个简单的 CMD 命令执行程序
下面,我们通过一个具体的示例来展示如何创建一个简单的 C# 控制台应用程序,用于执行 CMD 命令 。这里以执行dir命令(用于列出当前目录下的文件和文件夹)为例。
class Program
{static void Main(string[] args){// 创建一个ProcessStartInfo实例ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe"; // 指定CMD程序startInfo.Arguments = "/C dir"; // CMD命令,/C表示执行完命令后关闭CMD窗口startInfo.UseShellExecute = false; // 不使用外壳程序,以便重定向输入输出startInfo.RedirectStandardOutput = true; // 重定向标准输出流,用于获取命令执行结果startInfo.CreateNoWindow = true; // 不创建新的CMD窗口// 创建一个Process实例using (Process process = new Process()){process.StartInfo = startInfo;process.Start(); // 启动进程// 读取输出流using (StreamReader reader = process.StandardOutput){string result = reader.ReadToEnd();Console.WriteLine(result); // 打印输出结果}process.WaitForExit(); // 等待进程退出}}
}
在这段代码中:
-
首先创建了一个ProcessStartInfo对象startInfo,通过设置其属性来配置要启动的进程(即 CMD)的相关信息。
-
FileName属性指定要启动的程序为cmd.exe。
-
Arguments属性设置传递给cmd.exe的参数,/C dir表示执行dir命令并在执行完毕后关闭 CMD 窗口。
-
UseShellExecute设为false,这是为了能够重定向输入输出流,以便获取命令执行的结果。如果设为true,则无法对输入输出流进行重定向操作。
-
RedirectStandardOutput设为true,表示启用标准输出流的重定向,这样我们就可以通过process.StandardOutput来读取命令执行后的输出内容。
-
CreateNoWindow设为true,表示启动进程时不显示新的 CMD 窗口,这在一些自动化任务中可以避免不必要的窗口显示,使程序运行更加简洁。
然后,创建一个Process对象process,并将startInfo赋值给它的StartInfo属性,通过调用process.Start()方法启动进程。接着,使用StreamReader从process.StandardOutput中读取命令执行的输出结果,并将其打印到控制台。最后,调用process.WaitForExit()方法,等待进程执行完毕并退出,确保程序在 CMD 命令完全执行完成后再继续执行后续代码。
4.3 执行更复杂的 CMD 命令
在实际应用中,我们可能需要执行更复杂的 CMD 命令,比如执行一个批处理文件,或者运行一些需要特定参数的外部程序。下面以执行ping命令来测试网络连接为例,展示如何执行更复杂的 CMD 命令。
class Program
{static void Main(string[] args){// 创建一个ProcessStartInfo实例ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.Arguments = "/C ping www.baidu.com -t"; // 执行ping命令,-t表示持续pingstartInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;// 创建一个Process实例using (Process process = new Process()){process.StartInfo = startInfo;process.Start();// 读取输出流using (StreamReader reader = process.StandardOutput){string result = reader.ReadToEnd();Console.WriteLine(result);}process.WaitForExit();}}
}
在这个示例中,Arguments属性设置为/C ping www.baidu.com -t,这使得 CMD 执行ping www.baidu.com -t命令,即持续向www.baidu.com发送网络请求,以测试网络连接的稳定性。通过这种方式,我们可以轻松地在 C# 程序中执行各种复杂的 CMD 命令,满足不同的业务需求。
4.4 调用外部程序或脚本
除了执行 CMD 内置的命令,我们还可以通过 C# 调用外部的程序或脚本,如批处理文件(.bat)、可执行文件(.exe)等。下面以调用一个批处理文件为例进行说明。
假设我们有一个名为deploy.bat的批处理文件,位于C:\Scripts目录下,用于执行一些项目部署相关的操作,如安装依赖项、启动服务等。我们可以在 C# 中通过以下代码来调用它:
class Program
{static void Main(string[] args){// 创建一个ProcessStartInfo实例ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = @"C:\Scripts\deploy.bat"; // 指定批处理文件的路径startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;// 创建一个Process实例using (Process process = new Process()){process.StartInfo = startInfo;process.Start();// 读取输出流using (StreamReader reader = process.StandardOutput){string result = reader.ReadToEnd();Console.WriteLine(result);}process.WaitForExit();}}
}
在这段代码中,FileName属性直接指定了批处理文件的完整路径。当process.Start()方法被调用时,系统会启动 CMD 并执行该批处理文件中的所有命令。通过重定向标准输出流,我们可以获取批处理文件执行过程中的输出信息,并在控制台中打印出来。同样的原理,我们也可以将FileName属性设置为其他可执行文件的路径,从而实现调用各种外部程序的功能。
五、常见错误及解决方法
在使用 C# 调用 CMD 命令行的过程中,可能会遇到一些常见的错误。了解这些错误的原因并掌握相应的解决方法,能够帮助我们更顺利地实现功能。
5.1 权限问题
在调用某些需要管理员权限的 CMD 命令时,可能会遇到权限不足的问题,导致命令执行失败 。例如,执行一些涉及系统配置更改、文件系统操作等的命令,如修改注册表、创建或删除受保护的系统文件等。当权限不足时,系统可能会返回错误提示,如 “拒绝访问”。
解决这个问题的方法是以管理员身份运行 C# 程序。在 Visual Studio 中,可以通过以下步骤实现:
-
找到项目的属性,右键点击项目名称,选择 “属性”。
-
在属性窗口中,选择 “安全性” 选项卡。
-
勾选 “启用 ClickOnce 安全设置”,此时项目目录下会生成一个app.manifest文件。
-
打开app.manifest文件,找到这一行代码,将其修改为。
-
再次回到 “安全性” 选项卡,取消勾选 “启用 ClickOnce 安全设置”。
-
重新编译并运行程序,此时程序将以管理员身份运行,能够执行需要管理员权限的 CMD 命令。
5.2 命令注入风险
当我们将用户输入作为 CMD 命令的一部分时,如果没有进行适当的验证和过滤,可能会面临命令注入的风险 。恶意用户可能会通过输入特殊字符来篡改命令,从而执行未经授权的操作。例如,原本的命令是ping一个用户指定的 IP 地址,代码如下:
string userInput = Console.ReadLine();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = $"/C ping {userInput}";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.CreateNoWindow = true;
using (Process process = new Process())
{process.StartInfo = startInfo;process.Start();using (StreamReader reader = process.StandardOutput){string result = reader.ReadToEnd();Console.WriteLine(result);}process.WaitForExit();
}
如果恶意用户输入的内容为127.0.0.1 & del C:\important.txt,那么实际执行的命令就变成了ping 127.0.0.1 & del C:\important.txt,这可能会导致C:\important.txt文件被删除。
为了防范命令注入风险,我们需要对用户输入进行严格的验证和过滤。可以使用正则表达式来验证输入是否符合预期的格式,只允许合法的字符和格式。例如,对于ping命令的 IP 地址输入,可以使用以下正则表达式进行验证:
string userInput = Console.ReadLine();
if (!Regex.IsMatch(userInput, @"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"))
{Console.WriteLine("输入的IP地址格式不正确");return;
}
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = $"/C ping {userInput}";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.CreateNoWindow = true;
using (Process process = new Process())
{process.StartInfo = startInfo;process.Start();using (StreamReader reader = process.StandardOutput){string result = reader.ReadToEnd();Console.WriteLine(result);}process.WaitForExit();
}
这样,只有符合 IP 地址格式的输入才会被接受,从而有效降低了命令注入的风险。
5.3 输出假死问题
在读取 CMD 命令的输出时,有时会遇到程序假死的情况,即程序在执行process.WaitForExit()时一直处于等待状态,无法继续执行后续代码 。这通常是由于输出缓冲区已满,而程序没有及时读取导致的。例如,当执行一个会产生大量输出的命令时,如dir /s(列出指定目录及其所有子目录中的文件和文件夹),如果不及时处理输出,就可能会出现假死问题。
为了解决这个问题,我们可以采用异步读取输出流的方式。下面是一个示例代码:
class Program
{static void Main(string[] args){ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.Arguments = "/C dir /s";startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;using (Process process = new Process()){process.StartInfo = startInfo;process.Start();// 异步读取输出流process.OutputDataReceived += (sender, e) =>{if (!string.IsNullOrEmpty(e.Data)){Console.WriteLine(e.Data);}};process.BeginOutputReadLine();process.WaitForExit();}}
}
在这个示例中,通过注册process.OutputDataReceived事件,并调用process.BeginOutputReadLine()方法,程序会在后台异步读取输出流,避免了因输出缓冲区满而导致的假死问题。
六、应用场景举例
6.1 自动化日常任务
在日常工作中,我们经常会遇到一些重复性的任务,如定时备份文件、定时清理临时文件等。通过 C# 调用 CMD,我们可以轻松实现这些任务的自动化。
以定时备份文件为例,假设我们需要每天凌晨 2 点对某个文件夹进行备份。首先,我们可以编写一个批处理文件backup.bat,内容如下:
@echo off
set source=C:\MyFiles
set destination=D:\Backup\MyFiles_%date:~-10,4%-%date:~-5,2%-%date:~-2,2%
if not exist %destination% (md %destination%
)
xcopy %source%\* %destination% /E /H /C /I /Y
这个批处理文件的作用是将C:\MyFiles文件夹中的所有文件和子文件夹复制到D:\Backup目录下,并以当前日期命名备份文件夹。
然后,在 C# 中,我们可以使用System.Timers.Timer类来实现定时任务。代码如下:
using System;
using System.Diagnostics;
using System.Timers;class Program
{static void Main(){Timer timer = new Timer(1000 * 60 * 60 * 24); // 每隔24小时执行一次timer.Elapsed += Timer_Elapsed;timer.Start();Console.WriteLine("定时备份任务已启动,按任意键退出...");Console.ReadKey();}private static void Timer_Elapsed(object sender, ElapsedEventArgs e){ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.Arguments = "/C C:\\Scripts\\backup.bat";startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;using (Process process = new Process()){process.StartInfo = startInfo;process.Start();process.WaitForExit();}}
}
在这段代码中,我们创建了一个Timer对象,设置其Interval属性为 24 小时(以毫秒为单位)。当Timer的Elapsed事件触发时,会执行Timer_Elapsed方法,在该方法中调用 CMD 执行backup.bat批处理文件,从而实现每天凌晨 2 点自动备份文件的功能。
6.2 系统信息获取
通过 C# 调用 CMD,我们还可以获取系统的各种信息,如 CPU 使用率、内存使用情况、磁盘空间等。以获取 CPU 使用率为例,我们可以使用wmic命令。代码如下:
using System;
using System.Diagnostics;class Program
{static void Main(){ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.Arguments = "/C wmic cpu get loadpercentage";startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;startInfo.CreateNoWindow = true;using (Process process = new Process()){process.StartInfo = startInfo;process.Start();using (StreamReader reader = process.StandardOutput){string result = reader.ReadToEnd();Console.WriteLine(result);}process.WaitForExit();}}
}
这段代码执行wmic cpu get loadpercentage命令,该命令会获取当前 CPU 的使用率,并将结果输出到控制台。通过这种方式,我们可以在 C# 程序中方便地获取系统信息,为系统监控和管理提供支持。
七、总结与展望
通过本文的介绍,我们详细了解了在 C# 中调用执行命令行窗口(CMD)的方法。从原理上讲,利用System.Diagnostics.Process类,通过设置ProcessStartInfo的各项属性,我们能够实现对 CMD 的灵活调用,无论是执行简单的内置命令,还是运行复杂的批处理文件与外部程序,都能轻松应对。
在具体实现过程中,我们需要注意引入必要的命名空间,合理设置启动信息,如指定 CMD 程序路径、传递命令参数、控制窗口显示及重定向输出等。同时,还需关注可能出现的权限问题、命令注入风险以及输出假死等状况,并采取相应的解决措施。
C# 调用 CMD 在自动化日常任务、系统信息获取等诸多场景中展现出强大的功能,极大地提升了开发效率和应用程序的实用性。展望未来,随着技术的不断发展,这种交互方式在自动化领域有望发挥更大的作用。例如,在工业自动化控制中,通过 C# 调用 CMD 执行相关脚本,实现对生产设备的远程监控与管理;在大数据处理场景下,利用 CMD 调用各种数据处理工具,结合 C# 的编程优势,实现高效的数据处理流程自动化。相信在更多开发者的探索与实践中,C# 调用 CMD 将为我们带来更多意想不到的应用可能性。
相关文章:
C#如何调用执行命令行窗口(CMD)
一、引言 在 C# 的编程世界里,我们常常会遇到需要与操作系统底层进行交互的场景。这时,调用命令行窗口(CMD)就成为了一个强大的工具。无论是自动化日常任务,还是执行外部程序和批处理文件,通过 C# 调用 CM…...
归子莫的科技周刊#2:白天搬砖,夜里读诗
归子莫的科技周刊#2:白天搬砖,夜里读诗 本周刊开源,欢迎投稿。 刊期:2025.1.5 - 2025.1.11。原文地址。 封面图 下班在深圳看到的夕阳,能遇到是一种偶然的机会,能拍下更是一种幸运。 白天搬砖,…...
Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
目录 引言 Apache POI操作Excel的实用技巧 1.合并单元格操作 2.设置单元格样式 1. 创建样式对象 2. 设置边框 3. 设置底色 4. 设置对齐方式 5. 设置字体样式 6.设置自动换行 7. 应用样式到单元格 3. 定位和操作指定单元格 4.实现标签-值的形式 5.列宽设置 1. 设…...
OpenVela——专为AIoT领域打造的开源操作系统
目录 一、系统背景与开源 1.1. 起源 1.2. 开源 二、系统特点 2.1. 轻量化 2.2. 标准兼容性 2.3. 安全性 2.4. 高度可扩展性 三、技术支持与功能 3.1. 架构支持 3.2. 异构计算支持 3.3. 全面的连接套件 3.4. 开发者工具 四、应用场景与优势 4.1. 应用场景 4.2. …...
02UML图(D1_结构图)
目录 学习前言 ---------------------------------- 讲解一:类图 一、类图的组成结构 1. 类(Class) 1.1. 类的成员变量的表示方式 1.2. 类的成员方法的表示方式 2. 接口(Interface) 3. 包(Package) 二、UML类…...
二十三种设计模式-装饰器模式
一、定义与核心思想 装饰器模式是一种结构型设计模式,其核心思想是动态地给一个对象添加一些额外的职责。通过这种方式,可以在不改变原有对象结构的基础上,灵活地增加新的功能,使得对象的行为可以得到扩展,同时又保持…...
SSM课设-酒店管理系统功能设计
【课设者】SSM课设-酒店管理系统 分为用户端管理员端 技术栈: 后端: Spring Spring MVC MyBatis Mysql JSP 前端: HtmlCssJavaScriptAjax 功能: 用户端主要功能包括: 登录注册 客房预订 客房评论 首页 管理员端主要功能包括: 会员信息管理 客房信息…...
R语言的文件操作
R语言的文件操作 引言 在数据科学和分析的过程中,文件操作是不可或缺的一部分。R语言作为一种强大的统计计算和图形作图的编程语言,提供了丰富的文件操作函数,使得用户能够方便地读取和保存数据。本文将详细介绍R语言中的文件操作ÿ…...
[javaWeb]初识Web
将该图片在浏览器中打印出来 代码: <html> <head> <title>HTML初识</title> </head> <body> <h1>猫猫</h1> <img src "img/1.jpg"> </body> &l…...
基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
.netframwork模拟启动webapi服务并编写对应api接口
在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…...
Go语言之路————条件控制:if、for、switch
Go语言之路————if、for、switch 前言ifforswitchgoto和label 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程࿰…...
54,【4】BUUCTF WEB GYCTF2020Ezsqli
进入靶场 吓我一跳,但凡放个彭于晏我都不说啥了 提交个1看看 1 and 11 1# 还尝试了很多,不过都被过滤了,头疼 看看别人的WP 竟然要写代码去跑!!!,不会啊,先用别人的代码吧…...
在线图片压缩工具
在线图片压缩工具,无需登录,无需成本,用完就走。 包括中文和英文版本。 官网地址: https://compress.openai2025.com/ 效果:...
快手极速版如何查找ip归属地?怎么关掉
在数字化时代,个人隐私的保护成为了广大用户关注的焦点。快手极速版作为一款备受欢迎的短视频应用,其IP归属地的显示与关闭功能自然也成了用户热议的话题。本文将详细介绍如何在快手极速版中查找IP归属地以及如何关闭IP属地显示,帮助用户更好…...
精准掌握:Nginx匹配规则及其优先级解析
Nginx作为一款高性能的HTTP和反向代理服务器,其配置文件的匹配规则及优先级设置对于实现精确的请求路由和资源分配至关重要。本文将深入探讨Nginx的匹配规则及其优先级,帮助读者更好地理解和应用这些配置。 一、Nginx匹配规则概述 Nginx的匹配规则主要…...
在VS2022中用C++连接MySQL数据库读取数据库乱码问题
1.正确安装mysql 安装之后的配置文件 2.在VS2022中进行相关配置 (1)右键项目,打开属性 注意是右键项目,不是.cpp文件 (2)配置属性-> VC目录 -> 包含目录 ->添加头文件路径(如图&am…...
RocketMQ源码分析之事务消息分析
rocketMQ事务消息原理概述 RocketMQ采用两阶段提交(2PC)的思想来实现事务消息,当事务消息失败或者超时,同时采用补偿的方式处理这个问题。这两个阶段分别为正常事务消息的发送与提交以及事务消息的补偿。我们看看官方文档给的事务…...
2025.1.19机器学习笔记:PINN文献精读
第三十周周报 一、文献阅读题目信息摘要Abstract创新点物理背景网络框架实验实验一:直道稳定流条件实验二:环状网络中的非稳定流条件 结论缺点及展望 二、代码实践总结 一、文献阅读 题目信息 题目:《Enhanced physics-informed neural net…...
大文件上传服务-后端V1V2
文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节,把之前做的项目拿过来总结一下,自己写的一个…...
docker 基础语法学习,K8s基础语法学习,零基础学习
下面是关于Docker和Kubernetes的基础语法学习资料,包括一些关键概念和示例代码。 Docker 基础语法 1. 安装 Docker 首先,你需要安装 Docker。以下是不同操作系统上的安装指南: Windows/Mac: 下载并安装 Docker Desktop。 Linux: 根据你的…...
【网络协议】RFC3164-The BSD syslog Protocol
引言 Syslog常被称为系统日志或系统记录,是一种标准化的协议,用于网络设备、服务器和应用程序向中央Syslog服务器发送日志消息。互联网工程任务组(IETF)发布的RFC 3164,专门定义了BSD Syslog协议的规范和实现方式。通…...
MongoDB深度解析与实践案例
MongoDB深度解析与实践案例 在当今大数据与云计算盛行的时代,NoSQL数据库以其灵活的数据模型、水平扩展能力和高性能,成为处理海量数据的重要工具之一。MongoDB,作为NoSQL数据库的杰出代表,凭借其面向文档的存储结构、强大的查询语言以及丰富的生态系统,赢得了众多开发者…...
C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算
系列文章目录 01-C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算 文章目录 系列文章目录前言一、C语言的起源与应用领域1.1 C语言的起源1.2 C语言的应用领域1.2.1 操作系统开发1.2.2 嵌入式系统1.2.3 编译器开发1.2.4 游戏开发与图形处理…...
ArkUI概述
鸿蒙操作系统(HarmonyOS)是华为公司推出的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持各种不同的设备,从手机、平板到智能穿戴和智能家居产品,而且为开发者提供了一套统一的开发环境和工具链。对于想要深入鸿蒙开发…...
浅谈计算机网络03 | 现代网络组成
现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…...
在线图片马赛克处理工具
在线图片马赛克处理工具,无需登录,无需费用,用完就走。 包括中文和英文版本 官网地址: https://mosaic.openai2025.com...
文件上传 分片上传
分片上传则是将一个大文件分割成多个小块分别上传,最后再由服务器合并成完整的文件。这种做法的好处是可以并行处理多个小文件,提高上传效率;同时,如果某一部分上传失败,只需要重传这一部分,不影响其他部分…...
网络安全---CMS指纹信息实战
CMS简介 CMS(Content Management System)指的是内容管理系统,如WordPress、Joomla等。CMS系统非常常见,几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多,因此黑客将不断尝试利用这些漏洞攻击CMS…...
Ubuntu 24.04 LTS 系统语言英文改中文
Ubuntu 24.04 LTS 修改软件源 Ubuntu 更改软件源 修改语言 无需输入命令,为Ubuntu 24.04系统添加中文智能拼音输入法 在 setting 的 system 中按下图操作 点击“Apply Changes”。需要管理员密码,安装完成后,退出登录,重新登…...
信创在医疗领域的应用:开启医疗信息化新时代
信创在医疗领域的应用:开启医疗信息化新时代 信创在医疗领域的应用:开启医疗信息化新时代信创医疗自助一体机杭医基于信创底座的健康医疗大数据平台厦门大学附属成功医院基于海光CPU的信创改造中科可控基于海光CPU的智慧医疗解决方案 信创在医疗领域的应…...
力扣-数组-303 区域和检索-数组不可变
解析 题目有点费解,大致应该是给出区间内的和,然后维护一个前缀和,为了防止越界,先填一个0进去,在构建的时候也要注意此时构建的dp的下标是i1,所以加的前缀和的下标是i。 代码 class NumArray { public:…...
【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮
1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度,来添加对应的按钮和样式;使用 CSS 的浮动效果,参考CSS 实现超过固定高度后出现展开折叠按钮;使用容器查询 – container 语法;使用 clamp 函数进行样式判断。 3. 优…...
二十项零信任相关的前沿和趋势性技术-MASQUE
影响力评级:较低 市场渗透率:不到目标受众的 1% 成熟度:孵化 定义:基于QUIC加密的多路复用应用程序底层 (MASQUE) 是一个 IETF 标准草案,可实现流量的安全传输和代理。 MASQUE全称为:Multiplexed Appli…...
【Docker】使用Dev Container进行开发
工作区 Dev Container 设置 新建一个文件夹 ./devcontainer 然后下面放 devcontainer.json 然后安装 vscode dev container 插件,然后 CtrlShiftP 启动 Container {"name": "PyTorch-Julia Development","image": "x66ccff/p…...
搭建一个基于Spring Boot的数码分享网站
搭建一个基于Spring Boot的数码分享网站可以涵盖多个功能模块,例如用户管理、数码产品分享、评论、点赞、收藏、搜索等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的数码分享平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …...
在线json格式化工具
在线json格式化工具,包括中文和英文版本,无需登录,无需费用,用完就走。 官网地址: https://json.openai2025.com 效果如下:...
leetcode300.最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&…...
【个人学习记录】软件开发生命周期(SDLC)是什么?
软件开发生命周期(Software Development Life Cycle,SDLC)是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段: 需求分析(Requirements Analysis) 收集并分析用户需求定义系统目标…...
CTE与临时表:优劣势对比及使用场景分析
在数据库开发中,尤其是在复杂查询和优化中,**公共表表达式(CTE)和临时表(Temporary Table)**是两种常用的工具。尽管它们的功能有些相似,都是为了处理中间结果集,但它们的优劣势和使…...
Kali环境变量技巧(The Environment Variable Technique Used by Kali
Kali环境变量技巧 朋友们好,我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具…...
Ubuntu 24.04 LTS linux 文件权限
Ubuntu 24.04 LTS 文件权限 读权限 :允许查看文件的内容。写权限 (w):允许修改文件的内容。执行权限 (x):允许执行文件(对于目录来说,是进入目录的权限)。 文件权限通常与三类用户相关联: 文…...
多个版本JAVA切换(学习笔记)
多个版本JAVA切换 很多时候,我们电脑上会安装多个版本的java版本,java8,java11,java17等等,这时候如果想要切换java的版本,可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…...
AI刷题-最小替换子串长度、Bytedance Tree 问题
目录 一、最小替换子串长度 问题描述 输入格式 输出格式 输入样例 1 输出样例 1 输入样例 2 输出样例 2 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、Bytedance Tree 问题 问题描述 输入格式 输…...
Android 项目依赖冲突问题:Duplicate class found in modules
问题描述与处理处理 1、问题描述 plugins {id com.android.application }android {compileSdk 34defaultConfig {applicationId "com.my.dialog"minSdk 21targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.run…...
Webpack简述
一、为什么要构建工具 人类喜欢书写的代码以及开发方式计算机不喜欢,构建工具的作用就是让人类舒舒服服写自己喜欢的代码,然后一打包生成计算机喜欢的代码 第一个webpack自身仅仅是将我们引入的模块打包成一个文件(编译import)&am…...
ARM GCC编译器
ARM GCC编译器(GNU Compiler Collection for ARM)是GNU项目的一部分,专门用于编译针对ARM架构的代码。它是一个开源的工具链,支持多种编程语言,包括C、C和汇编语言。以下是关于ARM GCC编译器的详细解释及其作用&#x…...
CSS3 3D 转换介绍
CSS3 中的 3D 转换提供了一种在二维屏幕上呈现三维效果的方式,主要包括translate3d、rotate3d、scale3d等转换函数,下面来详细介绍: 1. 3D 转换的基本概念 坐标系 在 CSS3 的 3D 空间中,使用的是右手坐标系。X 轴是水平方向&…...
关于 Cursor 的一些学习记录
文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1:提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…...
3. 后端验证前端Token
书接上回,后端将token返回给前端,前端存入cookie,每次前端给后端发送请求,后端是如何验证的。 若依是用过滤器来实现对请求的验证,过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理࿰…...