Por que C# não é só sobre sites e jogos?
\n\nQuando se ouve "automação", a maioria lembra de Python ou Bash. E isso é justo: eles são leves, baseados em scripts, "para pobres". Mas e se você for um desenvolvedor .NET que não quer aprender uma nova sintaxe por causa de um único script? Ou seu projeto já está em C#, e arrastar dependências do Python para analisar logs é um inferno?
\n\nBem-vindo ao mundo da automação de tarefas em C#. Não é apenas "escrever um aplicativo de console". É uma ferramenta completa que pode trabalhar com o sistema de arquivos, registro, objetos COM, GUI e até executar comandos PowerShell. E tudo isso — com tipagem forte, IntelliSense e sem surpresas.
\n\nNeste artigo, vamos explorar 5 cenários específicos que você pode aplicar ainda hoje. Sem enrolação — apenas código e casos reais.
\n\n1. Manipulação de arquivos: limpando logs, arquivando projetos
\n\nA dor mais comum de qualquer desenvolvedor são pastas de logs inchadas, arquivos inúteis e a necessidade de fazer backup de builds. A automação C# de operações com arquivos é feita em 5 linhas.
\n\nExemplo: excluindo arquivos mais antigos que N dias
\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($"Excluído: {file}");\n}\n\n\nAltere SearchOption.AllDirectories para TopDirectoryOnly — e o script funciona apenas na raiz. Adicione try-catch — e ele estará pronto para produção.
Exemplo: arquivando uma pasta com data
\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($"Arquivo criado: {zipPath}");\n\n\nEste código pode ser agendado no Agendador de Tarefas do Windows (Task Scheduler) — e você esquece dos backups manuais. Automação em C# em ação.
\n\n2. Trabalhando com o registro: alterando configurações do sistema
\n\nÀs vezes é necessário definir uma chave de registro para todos os usuários ou, ao contrário, remover uma entrada de vírus. C# através de Microsoft.Win32 faz isso de forma segura e sem arquivos BAT.
using Microsoft.Win32;\n\n// Definindo um valor\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\nPara HKEY_CURRENT_USER, use Registry.CurrentUser. Importante: para HKLM são necessários privilégios de administrador — execute o aplicativo como administrador.
3. PowerShell a partir do C#: cruzando dois mundos
\n\nÀs vezes é mais fácil escrever um comando PowerShell do que implementá-lo em C#. Por exemplo, obter a lista de programas instalados ou reiniciar um serviço. A biblioteca System.Management.Automation permite executar scripting em C# com chamadas de comandos PS.
Instale o pacote NuGet:
\nInstall-Package Microsoft.PowerShell.SDK\n\nExemplo: reiniciando um serviço
\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($"Erro: {error.Exception.Message}");\n }\n }\n else\n {\n Console.WriteLine("Serviço reiniciado.");\n }\n}\n\n\nDessa forma, você obtém a flexibilidade do PowerShell e a segurança do C#. Perfeito para automação Windows em cor