Почему C# — это не только про сайты и игры?
Когда слышишь «автоматизация», большинство вспоминает Python или Bash. И это справедливо: они легкие, скриптовые, «для бедных». Но что, если вы — .NET-разработчик, который не хочет учить новый синтаксис ради одного скрипта? Или ваш проект уже на C#, и тащить Python-зависимости ради парсинга логов — это ад?
Добро пожаловать в мир автоматизации задач на C#. Это не просто «написать консольное приложение». Это полноценный инструмент, который может работать с файловой системой, реестром, COM-объектами, GUI и даже выполнять PowerShell-команды. И всё это — в строгой типизации, с IntelliSense и без сюрпризов.
В этой статье мы разберем 5 конкретных сценариев, которые вы сможете применить уже сегодня. Никакой воды — только код и реальные кейсы.
1. Работа с файлами: чистим логи, архивируем проекты
Самая частая боль любого разработчика — разросшиеся папки с логами, мусорные файлы и необходимость бэкапить билды. C# автоматизация файловых операций делается в 5 строк.
Пример: удаление файлов старше N дней
using System.IO;
string path = @"C:\Logs\";
int daysOld = 30;
var oldFiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
.Where(f => File.GetLastWriteTime(f) < DateTime.Now.AddDays(-daysOld));
foreach (var file in oldFiles)
{
File.Delete(file);
Console.WriteLine($"Удалён: {file}");
}
Меняем SearchOption.AllDirectories на TopDirectoryOnly — и скрипт работает только в корне. Добавляем try-catch — и он готов к продакшену.
Пример: архивация папки с датой
using System.IO.Compression;
string source = @"C:\Projects\MyApp\bin\Release";
string zipPath = $@"C:\Backups\MyApp_{DateTime.Now:yyyy-MM-dd}.zip";
ZipFile.CreateFromDirectory(source, zipPath);
Console.WriteLine($"Архив создан: {zipPath}");
Этот код можно повесить на планировщик Windows (Task Scheduler) — и забыть о ручных бэкапах. Автоматизация на C# в действии.
2. Работа с реестром: меняем настройки системы
Иногда нужно прописать ключ реестра для всех пользователей или, наоборот, удалить вирусную запись. C# через Microsoft.Win32 делает это безопасно и без BAT-файлов.
using Microsoft.Win32;
// Установка значения
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\MyCompany", true);
if (key == null)
{
key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\MyCompany");
}
key.SetValue("InstallPath", @"C:\Program Files\MyApp");
key.Close();
Для HKEY_CURRENT_USER используем Registry.CurrentUser. Важно: для HKLM нужны права администратора — запускайте приложение от имени администратора.
3. PowerShell из C#: скрещиваем два мира
Иногда проще написать команду PowerShell, чем реализовывать её на C#. Например, получить список установленных программ или перезагрузить службу. Библиотека System.Management.Automation позволяет выполнять скриптинг на C# с вызовом PS-команд.
Установите NuGet-пакет:
Install-Package Microsoft.PowerShell.SDK
Пример: перезапуск службы
using System.Management.Automation;
using (PowerShell ps = PowerShell.Create())
{
ps.AddScript("Restart-Service -Name 'Spooler' -Force");
var results = ps.Invoke();
if (ps.HadErrors)
{
foreach (var error in ps.Streams.Error)
{
Console.WriteLine($"Ошибка: {error.Exception.Message}");
}
}
else
{
Console.WriteLine("Служба перезапущена.");
}
}
Таким образом вы получаете гибкость PowerShell и безопасность C#. Идеально для автоматизации Windows в корпоративной среде.
4. GUI-автоматизация: кликаем за пользователя
Представьте: есть legacy-приложение без API, и вам нужно вводить данные каждое утро. Или тестировать UI в 2000-й раз. Тут на помощь приходят библиотеки для автоматизации GUI на C#.
Лучший выбор для Windows — FlaUI (на базе Microsoft UIA). Установите:
Install-Package FlaUI.UIA3
Пример: открыть Блокнот и написать текст
using FlaUI.UIA3;
using FlaUI.Core.AutomationElements;
var app = Application.Launch("notepad.exe");
var window = app.GetMainWindow(new UIA3Automation());
var edit = window.FindFirstDescendant(cf => cf.ByControlType(FlaUI.Core.Definitions.ControlType.Edit))
.AsTextBox();
edit.Text = "Привет, автоматизация!";
Console.WriteLine("Текст введён.");
FlaUI умеет кликать кнопки, читать таблицы, ждать появления окон. Это мощный инструмент для GUI автоматизации C#, который заменяет AutoIt и Selenium для десктопа.
5. Работа с COM-объектами: Excel, Outlook, Word
Если вам нужно сгенерировать отчёт в Excel или разослать письма через Outlook — необязательно тащить Interop. Но если он уже есть в проекте, C# с ним справляется отлично.
Добавьте ссылку на Microsoft.Office.Interop.Excel (через COM или NuGet).
Пример: создание Excel-файла
using Excel = Microsoft.Office.Interop.Excel;
var excelApp = new Excel.Application();
excelApp.Visible = false;
var workbook = excelApp.Workbooks.Add();
var sheet = (Excel.Worksheet)workbook.Sheets[1];
sheet.Cells[1, 1] = "Название";
sheet.Cells[1, 2] = "Количество";
sheet.Cells[2, 1] = "Товар A";
sheet.Cells[2, 2] = 42;
workbook.SaveAs(@"C:\Report.xlsx");
workbook.Close();
excelApp.Quit();
Важно: не забывайте вызывать Marshal.ReleaseComObject для каждого COM-объекта, иначе процесс Excel повиснет в памяти.
Как собрать всё вместе: универсальный скрипт-оркестратор
Лучший способ использовать автоматизацию задач на C# — создать консольное приложение с параметрами командной строки. Например:
static void Main(string[] args)
{
switch (args[0])
{
case "clean-logs":
CleanLogs(args[1], int.Parse(args[2]));
break;
case "backup":
BackupProject(args[1], args[2]);
break;
case "start-service":
RestartService(args[1]);
break;
default:
Console.WriteLine("Неизвестная команда");
break;
}
}
Затем вы создаёте BAT-файлы или задачи в Task