O mais próximo do registro que eu posso encontrar é o arquivo Windows Update log
. A única outra maneira é acessá-lo por meio da API COM
.
Falei com o gerente da Microsoft responsável por Windows Update
(Dave Roth) e ele disse que você absolutamente não deveria tentar obter o status do Windows Update através do registro. Ele disse que você deve usar a API COM
para obter o status executando o método de pesquisa e usando os resultados retornados para o status de atualização do seu computador.
Ele também me deu essa dica:
As a simple FYI, for checking what updates are installed calling
IUpdateSearcher::Search
withIsInstalled=1
will generate anupdatecollection
object containing all installed updates. You can walk through it to see what is already installed.
Expandindo sua dica, você poderia chamar esse método com IsInstalled=0
para ver quais atualizações não estão instaladas. (veja o exemplo do powershell abaixo).
Arquivo de registro do Windows Update
O arquivo de log do Windows Update é uma boa maneira de ver o status atual do Windows Update. Esse método seria bom se você pudesse acessar o sistema de arquivos e não tivesse acesso a APIs ou outras estruturas / plataformas e coisas do tipo.
Você pode encontrá-lo neste caminho:% %windir%\Windowsupdate.log
O arquivo de log do Windows Update possui este formato:
Date
Time
PID
TID
Component
Text
Uma linha de exemplo com dados de modelo seria esta:
[date][time] [PID][TID][Component][Text]
Aqui está um exemplo completo:
2005-06-0118:30:03 992810Agent * WU client version 5.8.0.2468
Este é um exemplo em que o Windows Update Agent pesquisa atualizações disponíveis e exibe os resultados:
2005-06-0212:09:36 9924e8Agent*************
2005-06-0212:09:36 9924e8Agent** START ** Agent: Finding updates [CallerId = WindowsUpdate]
2005-06-0212:09:36 9924e8Agent*********
2005-06-0212:09:36 9924e8Agent * Added update {AC94DB3B-E1A8-4E92-9FD0-E86F355E6A44}.100 to search result
2005-06-0212:09:37 9924e8Agent * Found 6 updates and 10 categories in search
Em sistemas modernos, você precisará executar o commandlet do PowerShell Get-WindowsUpdateLog
, pois o log agora não está mais armazenado no log, o log é armazenado em etl
files.
O comando irá compilar o arquivo WindowsUpdate.log
de todos os arquivos etl
e disponibilizá-lo (por padrão) na pasta Desktop do usuário atual.
Aqui está a descrição do comando:
The
Get-WindowsUpdateLog
cmdlet merges and converts Windows Update .etl files into a single readable WindowsUpdate.log file. Windows Update Agent uses Event Tracing for Windows (ETW) to generate diagnostic logs. Windows Update no longer directly produces a WindowsUpdate.log file. Instead, it produces .etl files that are not immediately readable as written.This cmdlet requires access to a Microsoft symbol server.
API COM
A API COM
é uma boa maneira de acessar diretamente o Windows Update sem precisar analisar logs. As aplicações desta API vão desde encontrar atualizações disponíveis no computador até instalar e desinstalar atualizações.
Você pode usar a classe Microsoft.Update.Session para executar uma pesquisa de atualização e contar o número de atualizações disponíveis para ver se há atualizações para o computador.
Exemplo do PowerShell:
$updateObject = New-Object -ComObject Microsoft.Update.Session
$updateObject.ClientApplicationID = "Serverfault Example Script"
$updateSearcher = $updateObject.CreateUpdateSearcher()
$searchResults = $updateSearcher.Search("IsInstalled=0")
Write-Host $searchResults.Updates.Count
Se o resultado retornado for maior que 0, haverá atualizações para o computador que precisa ser instalado e / ou baixado. Você pode atualizar facilmente o script do PowerShell para se adequar ao seu aplicativo.
Apenas no heads-up, parece que a função de pesquisa não é assíncrona, por isso congelaria o aplicativo durante a pesquisa. Nesse caso, você vai querer torná-lo assíncrono.
Tl; Dr
Se você estiver criando um tipo de aplicativo não script (compilado) (com exceção do PowerShell que tem acesso a COM
APIs), recomendamos usar a API COM
. Caso contrário, a análise de log seria sua melhor opção.
Links
Como ler o arquivo de registro:
link
cmdlet de compilação de log do PowerShell:
link
Referência da API do Com32:
link