C# 任务自动化:懒人开发者的 5 个强大工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么 C# 不仅仅是网站和游戏?

\n\n

当听到“自动化”时,大多数人会想到 Python 或 Bash。这很合理:它们轻量、脚本化、“适合穷人”。但如果您是一名 .NET 开发者,不想为了一个脚本学习新语法呢?或者您的项目已经在使用 C#,而为了解析日志引入 Python 依赖简直是噩梦?

\n\n

欢迎来到 C# 任务自动化 的世界。这不仅仅是“编写一个控制台应用程序”。它是一个完整的工具,可以与文件系统、注册表、COM 对象、GUI 甚至执行 PowerShell 命令协同工作。而且这一切都在强类型、IntelliSense 和无意外的情况下完成。

\n\n

在本文中,我们将分析 5 个具体场景,您今天就可以应用它们。没有废话——只有代码和真实案例。

\n\n

1. 文件操作:清理日志,归档项目

\n\n

任何开发者最常遇到的痛点——日志文件夹膨胀、垃圾文件以及需要备份构建产物。C# 自动化 文件操作只需 5 行代码。

\n\n

示例:删除 N 天前的文件

\n\n
using System.IO;\n\nstring path = @"C:\\Logs\\";\nint daysOld = 30;\n\nvar oldFiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)\n    .Where(f => File.GetLastWriteTime(f) < DateTime.Now.AddDays(-daysOld));\n\nforeach (var file in oldFiles)\n{\n    File.Delete(file);\n    Console.WriteLine($"已删除: {file}");\n}\n
\n\n

将 SearchOption.AllDirectories 改为 TopDirectoryOnly——脚本就只在根目录运行。添加 try-catch——它就可以投入生产环境。

\n\n

示例:带日期归档文件夹

\n\n
using System.IO.Compression;\n\nstring source = @"C:\\Projects\\MyApp\\bin\\Release";\nstring zipPath = $@"C:\\Backups\\MyApp_{DateTime.Now:yyyy-MM-dd}.zip";\n\nZipFile.CreateFromDirectory(source, zipPath);\nConsole.WriteLine($"归档已创建: {zipPath}");\n
\n\n

这段代码可以挂载到 Windows 任务计划程序 (Task Scheduler) 上——然后忘记手动备份。C# 自动化 在行动。

\n\n

2. 注册表操作:修改系统设置

\n\n

有时需要为所有用户写入注册表键,或者相反,删除恶意记录。C# 通过 Microsoft.Win32 可以安全地完成,无需 BAT 文件。

\n\n
using Microsoft.Win32;\n\n// 设置值\nRegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\MyCompany", true);\nif (key == null)\n{\n    key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\MyCompany");\n}\nkey.SetValue("InstallPath", @"C:\\Program Files\\MyApp");\nkey.Close();\n
\n\n

对于 HKEY_CURRENT_USER,使用 Registry.CurrentUser。重要提示:HKLM 需要管理员权限——请以管理员身份运行应用程序。

\n\n

3. 从 C# 调用 PowerShell:融合两个世界

\n\n

有时编写一条 PowerShell 命令比用 C# 实现它更容易。例如,获取已安装程序列表或重启服务。System.Management.Automation 库允许在 C# 脚本编写 中调用 PS 命令。

\n\n

安装 NuGet 包:

\n
Install-Package Microsoft.PowerShell.SDK
\n\n

示例:重启服务

\n\n
using System.Management.Automation;\n\nusing (PowerShell ps = PowerShell.Create())\n{\n    ps.AddScript("Restart-Service -Name 'Spooler' -Force");\n    var results = ps.Invoke();\n    \n    if (ps.HadErrors)\n    {\n        foreach (var error in ps.Streams.Error)\n        {\n            Console.WriteLine($"错误: {error.Exception.Message}");\n        }\n    }\n    else\n    {\n        Console.WriteLine("服务已重启。");\n    }\n}\n
\n\n

这样,您就获得了 PowerShell 的灵活性和 C# 的安全性。非常适合在企

博客

书籍推荐