为什么 C# 不仅仅是网站和游戏?
\n\n当听到“自动化”时,大多数人会想到 Python 或 Bash。这很合理:它们轻量、脚本化、“适合穷人”。但如果您是一名 .NET 开发者,不想为了一个脚本学习新语法呢?或者您的项目已经在使用 C#,而为了解析日志引入 Python 依赖简直是噩梦?
\n\n欢迎来到 C# 任务自动化 的世界。这不仅仅是“编写一个控制台应用程序”。它是一个完整的工具,可以与文件系统、注册表、COM 对象、GUI 甚至执行 PowerShell 命令协同工作。而且这一切都在强类型、IntelliSense 和无意外的情况下完成。
\n\n在本文中,我们将分析 5 个具体场景,您今天就可以应用它们。没有废话——只有代码和真实案例。
\n\n1. 文件操作:清理日志,归档项目
\n\n任何开发者最常遇到的痛点——日志文件夹膨胀、垃圾文件以及需要备份构建产物。C# 自动化 文件操作只需 5 行代码。
\n\n示例:删除 N 天前的文件
\n\nusing 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\nusing 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\n2. 注册表操作:修改系统设置
\n\n有时需要为所有用户写入注册表键,或者相反,删除恶意记录。C# 通过 Microsoft.Win32 可以安全地完成,无需 BAT 文件。
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 需要管理员权限——请以管理员身份运行应用程序。
3. 从 C# 调用 PowerShell:融合两个世界
\n\n有时编写一条 PowerShell 命令比用 C# 实现它更容易。例如,获取已安装程序列表或重启服务。System.Management.Automation 库允许在 C# 脚本编写 中调用 PS 命令。
安装 NuGet 包:
\nInstall-Package Microsoft.PowerShell.SDK\n\n示例:重启服务
\n\nusing 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# 的安全性。非常适合在企