当前位置: 首页 > news >正文

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 中,可以通过以下步骤实现:

  1. 找到项目的属性,右键点击项目名称,选择 “属性”。

  2. 在属性窗口中,选择 “安全性” 选项卡。

  3. 勾选 “启用 ClickOnce 安全设置”,此时项目目录下会生成一个app.manifest文件。

  4. 打开app.manifest文件,找到这一行代码,将其修改为。

  5. 再次回到 “安全性” 选项卡,取消勾选 “启用 ClickOnce 安全设置”。

  6. 重新编译并运行程序,此时程序将以管理员身份运行,能够执行需要管理员权限的 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…...

vim练级攻略(精简版)

vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格&#xff0c;tab&am…...

一文速通Java的JDBC编程

目录 &#x1f43d;JDBC的引入 什么是API JDBC的概念及作用 &#x1f347;准备工作 数据库驱动包 下载第三方库 &#x1f43e;JDBC 使用 将jar包导入项目 通过代码使用JDBC的API (1)创建数据源对象并设置属性 (2)和数据库服务器建立网络连接 (3)程序构造SQL语句 (…...

laravel中请求失败重试的扩展--Guzzle

背景 开发过程中&#xff0c;跟外部接口对接时&#xff0c;很常见的要考虑到失败重新的情况&#xff0c;这里记录一下我用的失败重试的情况&#xff0c; 重试方法 1、使用 Laravel 的 HTTP 客户端和异常处理 结合异常处理和重试逻辑 use Illuminate\Support\Facades\Http;…...

如何在vue中渲染markdown内容?

文章目录 引言什么是 markdown-it&#xff1f;安装 markdown-it基本用法样式失效&#xff1f;解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中&#xff0c;Markdown 作为一种轻量级的标记语言&#xff0c;广泛用于文档编写、内容管理以及富文本编辑器中。markdown…...

Mysql MVCC

MVCC 什么是MVCC MVCC&#xff08;多版本并发控制&#xff0c;Multi-Version Concurrency Control&#xff09; 是一种用于数据库管理系统&#xff08;DBMS&#xff09;中的并发控制机制&#xff0c;它允许多个事务同时执行而不互相阻塞&#xff0c;并通过创建数据的多个版本…...

Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端

文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理&#xff08;1&#xff09;为RestClient&#xff08;2&#xff09;为WebClient&#xff08;3&#xff09;为RestTemplate 注意 一、概述 官方文档…...

springboot医院信管系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…...

迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写内核 LED HDF 驱动程序

接下来编译 LED 驱动&#xff0c;该驱动用于在基于华为设备框架&#xff08;HDF&#xff09;的系统中控制 LED 灯的开关&#xff0c;完整代码如下所示&#xff1a; 更多内容可以关注&#xff1a;迅为RK3568开发板篇OpenHarmony...

[javaWeb]初识Web

将该图片在浏览器中打印出来 代码&#xff1a; <html> <head> <title>HTML初识</title> </head> <body> <h1>猫猫</h1> <img src "img/1.jpg"> </body> &l…...

复健第二天之[MoeCTF 2022]baby_file

打开题目在线环境可以看到&#xff1a; 感觉要用伪协议去求&#xff0c;但是我们并不知道flag的位置&#xff0c;这里我选择用dirsearch去扫一下&#xff1a; 最像的应该就是flag.php了 于是就构建payload&#xff1a; **?filephp://filter/convert.base64-encode/resource…...

uniapp 微信小程序 editor 富文本编辑器

<view class"inp boxsizing"><view class"contentBox"><!-- 富文本编辑器 --><view classwrapper><view classtoolbar tap"format"><view :class"formats.bold ? ql-active : " class"iconfon…...

SparkSQL函数

文章目录 1. SparkSQL函数概述2. SparkSQL内置函数2.1 常用内置函数分类2.2 常用数组函数2.2.1 array()函数1. 定义2. 语法3. 示例 2.3 常用日期与时间戳函数2.4 常见聚合函数2.5 常见窗口函数 3. SparkSQL自定义函数3.1 自定义函数分类3.2 自定义函数案例演示 1. SparkSQL函数…...

从零开始学数据库 day2 DML

从零开始学数据库&#xff1a;DML操作详解 在今天的数字化时代&#xff0c;数据库的使用已经成为了各行各业的必备技能。无论你是想开发一个简单的应用&#xff0c;还是想要管理复杂的数据&#xff0c;掌握数据库的基本操作都是至关重要的。在这篇博客中&#xff0c;我们将专注…...

电脑换固态硬盘

参考&#xff1a; https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种&#xff1a; 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜&#xff1a; M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…...

【大数据】机器学习------支持向量机(SVM)

支持向量机的基本概念和数学公式&#xff1a; 1. 线性可分的支持向量机 对于线性可分的数据集 &#xff0c;其中(x_i \in R^d) 是特征向量 是类别标签&#xff0c;目标是找到一个超平面 &#xff0c;使得对于所有 的样本 &#xff0c;对于所有(y_i -1) 的样本&#xff0c;…...

Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅

引言&#xff1a;音浪太强&#xff0c;我稳如老 HAL&#xff01; 如果有一天你的耳机里传来的不是《咱们屯里人》&#xff0c;而是金属碰撞般的杂音&#xff0c;那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果&#xff01;在 Android 音频架构中&#xff0c…...

Golang Gin系列-2:搭建Gin 框架环境

开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中&#xff0c;我们将引导你完成安装Go编程语言和Gin框架的过程&#xff0c;Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中&#xff0c;本指南是高效而强大的web开发路线图。 安装…...

FGC_grasp复现

复现FGC_grasp 环境配置数据集准备RuntimeError: CUDA error: invalid device ordinal 问题的解决方案raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file问题的解决方案加载数据集时总是被kill然后服务器也卡住了动不了问题的…...

实力认证 | 海云安入选《信创安全产品及服务购买决策参考》

近日&#xff0c;国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》&#xff0c;报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…...

Avalonia系列文章之小试牛刀

最近有朋友反馈&#xff0c;能否分享一下Avalonia相关的文章&#xff0c;于是就抽空学习了一下&#xff0c;发现Avalonia真的是一款非常不错的UI框架&#xff0c;值得花时间认真学习一下&#xff0c;于是边学习边记录&#xff0c;整理成文&#xff0c;分享给大家&#xff0c;希…...

中国数字安全产业年度报告(2024)

数字安全是指&#xff0c;在全球数字化背景下&#xff0c;合理控制个人、组织、国家在各种活动中面临的数字风险&#xff0c;保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…...

LabVIEW桥接传感器配置与数据采集

该LabVIEW程序主要用于配置桥接传感器并进行数据采集&#xff0c;涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI&#xff08;"Auto Cleanup"&#xff09;用于自动清理资源&#xff0c;建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…...

简明docker快速入门并实践方法

简明docker快速入门并实践方法 前言&#xff1a;1. 什么是Docker&#xff1f;2. Docker的基本概念3. 安装配置Docker4. Docker基本命令&#xff1a;5. 简单实践&#xff1a;拉取Nginx镜像-自定义配置-推送镜像步骤 1&#xff1a;拉取Nginx镜像步骤 1.5&#xff08;可选&#xf…...

《MambaIR:一种基于状态空间模型的简单图像修复基线方法》学习笔记

paper&#xff1a;2402.15648 目录 摘要 一、引言 1、模型性能的提升依赖于网络感受野的扩大&#xff1a; 2、全局感受野和高效计算之间存在固有矛盾&#xff1a; 3、改进版 Mamba的巨大潜力 4、Mamba 在图像修复任务中仍面临以下挑战&#xff1a; 5、方法 6、主要贡献…...

链式前向星的写法

【图论02】动画说图的三种保存方式 降低理解门槛 邻接表 链式前向星 邻接矩阵_哔哩哔哩_bilibili 杭电ACM刘老师-算法入门培训-第12讲-拓扑排序及链式前向星_哔哩哔哩_bilibili 图论003链式前向星_哔哩哔哩_bilibili&#xff08;链式前向星的遍历&#xff09; head数组的下标…...

【逆境中绽放:万字回顾2024我在挑战中突破自我】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…...

尺取法(算法优化技巧)

问题和序列的区间有关&#xff0c;且需要操作两个变量&#xff0c;可以用两个下标&#xff08;指针&#xff09;i 和 j 扫描区间。 1&#xff0c;反向扫描&#xff0c;i 从头&#xff0c;j 从尾&#xff0c;在中间相遇。 例1.1&#xff08;P37&#xff09; 找指定和的整数对…...

基于 K-Means 聚类分析实现人脸照片的快速分类

注:本文在创作过程中得到了 ChatGPT、DeepSeek、Kimi 的智能辅助支持,由作者本人完成最终审阅。 在 “视频是不能 P 的” 系列文章中,博主曾先后分享过人脸检测、人脸识别等相关主题的内容。今天,博主想和大家讨论的是人脸分类问题。你是否曾在人群中认错人,或是盯着熟人的…...

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统&#xff0c;广泛应用于FortiGate下一代防火墙&#xff0c;为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…...

网站建设公司简介范文/好口碑关键词优化地址

lvs fullnat开源出来有一阵子了&#xff0c;刚开源时研究过一阵子&#xff0c;现在重新捡起来发现它的优势不是一星半点的&#xff0c;闲下来总结了一下。 1、syn_proxy----------用于防御synflood攻击 可以在keepalived配置文件中针对每一个服务分别设置打开或关闭。 2、conne…...

做网站市场价格多少/青岛网站制作

基于ssm的小区物业管理系统源码下载地址文章结构一、开发框架及业务方向1.开发环境2.开发框架3.整体业务二、项目结构及页面展示1.超级管理员页面2.普通管理员页面源码下载地址 点击前往下载 文章结构 一、开发框架及业务方向 1.开发环境 操作系统不限&#xff1a;java特性&…...

web网站如何做负载均衡/公司网址怎么制作

【题目描述】 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 &#xff08;原题地址&#xff09; 【样例示例】 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff…...

一级做a视频在线观看网站/宁波网站seo公司

第一个QNX程序已经写完&#xff0c;测试了QNX应用的开发过程&#xff0c;开始写一些复杂一点点的程序。 最先想到的是获取键盘输入和通过控制台进行输出&#xff0c;这些都是当初学习C语言的时候必做的功课。 <wbr></wbr> 和标准的C语言一样&#xff0c;QNX C语…...

做农家乐网站/小程序自助搭建平台

命令模式(Command Pattern)&#xff1a;将一个请求封装为一个对象&#xff0c;从而使我们可用不同的请求对客户进行参数化&#xff1b;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 命令模式包含如下角色&#xff1a; Command(抽象命令类):一般是一个接口&am…...

网站建设的原则有哪些/百度怎么发帖做推广

2017年1月15日科技部面试题(科技部2017年面试阶段分为三天。第一天上午体检&#xff0c;下午英语和专业课;第二天&#xff0c;素质拓展为主&#xff0c;首先用15分钟分组、起名、选队长等&#xff0c;然后开始素质拓展活动&#xff0c;每个活动之后&#xff0c;都会让考生们分享…...