Problema
Atualizar o wallpaper em um único computador é simples. Atualizar conteúdo de desktop e lock screen em endpoints Windows gerenciados é um problema de distribuição de software.
A solução precisa atender vários usuários, sobreviver a reinicializações, aplicar mudanças sem reconstruir o pacote do Intune, manter credenciais de publicação fora dos endpoints, validar conteúdo remoto, evitar releases parcialmente ativadas e preservar o estado funcional quando a rede ou o processo de publicação falha.
Um único script executado em apenas um contexto de segurança não atende todos esses requisitos com segurança. Downloads e estado compartilhado exigem acesso elevado, enquanto desktop e lock screen pertencem ao perfil do usuário conectado.
Solução
WallpaperAgent separa três responsabilidades:
- um processo externo de publicação grava imagens e um manifesto versionado em um repositório de conteúdo ou origem HTTPS;
- uma tarefa de máquina executada como
SYSTEMbaixa e valida o conteúdo candidato; - uma tarefa no contexto do usuário interativo aplica somente os arquivos previamente validados.
O código do agente e o conteúdo visual possuem ciclos de vida independentes. Uma nova campanha pode ser publicada adicionando os arquivos e atualizando manifest.json, sem reconstruir ou redistribuir o pacote .intunewin.
Os endpoints não recebem credenciais de escrita no repositório. Eles utilizam acesso HTTPS anônimo ou controlado e somente leitura, enquanto as credenciais de publicação permanecem exclusivamente no serviço autorizado.
Contrato do manifesto e validação
O manifesto versionado descreve uma release combinada contendo os arquivos de desktop e lock screen. Cada item declara nome de arquivo simples, URL HTTPS absoluta, versão e hash SHA-256.
Antes que uma release candidata possa ser ativada, o updater valida:
- tamanho do manifesto, estrutura JSON, versão do schema e campos obrigatórios;
- versões da release e dos arquivos;
- URLs HTTPS absolutas;
- nomes de arquivo sem caminhos de diretório;
- allowlist de extensões
.jpg,.jpege.png; - limites configurados de tamanho;
- formato e cálculo do SHA-256;
- decodificação real da imagem e dimensões maiores que zero.
HTTPS protege o transporte. SHA-256 identifica os bytes exatos esperados pelo publicador. A decodificação confirma que um arquivo com nome e hash válidos pode ser processado como imagem.
Promoção atômica e comportamento em falhas
Os arquivos candidatos são baixados para nomes temporários exclusivos. Eles são movidos para o destino final somente depois que todas as verificações são aprovadas.
O current.json da máquina é atualizado de forma atômica apenas quando os arquivos de desktop e lock screen estão disponíveis. Isso evita um estado misto no qual cada imagem pertence a uma campanha diferente.
Quando uma requisição de rede falha, o manifesto é inválido, um hash está incorreto, uma imagem está corrompida ou um arquivo está ausente, a release candidata é rejeitada. A release validada anterior e seus arquivos continuam disponíveis.
As falhas são registradas no estado e em logs rotativos; o updater não limpa a configuração funcional apenas porque uma nova publicação falhou.
Separação de privilégios
A tarefa de atualização é executada como SYSTEM e controla downloads, validação, arquivos compartilhados, estado da máquina, valores de detecção no Registro, instalação e definições das tarefas agendadas.
A tarefa de aplicação é executada no contexto do usuário interativo e controla configurações de desktop em HKCU, a operação de lock screen pelas APIs do Windows Runtime, estado por usuário em %LOCALAPPDATA% e correção de alterações manuais.
Usuários padrão recebem apenas leitura e execução sobre os arquivos validados. Eles não podem substituir o agente, os scripts ou o estado compartilhado. Mutexes nomeados e a configuração IgnoreNew impedem execuções sobrepostas.
Empacotamento e detecção no Intune
O repositório inclui um script de build que cria uma área limpa de empacotamento, gera a detecção de versão e pode chamar o Microsoft Win32 Content Prep Tool.
O script de detecção valida identidade e versão registradas, caminho de instalação, scripts e módulo obrigatórios, as duas tarefas agendadas e se nenhuma delas está desabilitada.
Isso separa o estado da instalação do estado do conteúdo: o Intune confirma a versão do agente, o estado de máquina informa o resultado da atualização e o estado por usuário registra a aplicação no perfil atual.
Diagnóstico e ciclo de vida
O projeto inclui testes de instalação, validação do manifesto remoto, validação do estado instalado, coleta de diagnósticos, suporte a atualização e desinstalação com -WhatIf.
Os arquivos baixados são preservados por padrão na desinstalação porque o Windows pode continuar referenciando seus caminhos. A limpeza completa permanece disponível por uma opção explícita.
Estado atual
O repositório público contém updater e aplicador, configuração e módulo auxiliar, instalador, desinstalador, testes, diagnósticos, gerador de pacote, detecção do Intune, política de segurança, changelog e documentação bilíngue de arquitetura, configuração, manifesto e implantação.
Endpoints de publicação, credenciais, identidade do repositório de conteúdo e detalhes de políticas internas permanecem fora do controle de versão.
O que o projeto demonstra
WallpaperAgent demonstra distribuição segura de conteúdo em endpoints, e não apenas um script de wallpaper. Código e conteúdo são separados, os endpoints possuem acesso somente leitura, arquivos remotos são tratados como não confiáveis até a validação, a ativação é atômica, os privilégios são divididos por responsabilidade e falhas preservam a última release funcional.