Compartilhar via


Trabalhando com instalações de software

Os aplicativos instalados com o Windows Installer podem ser encontrados por meio das consultas do WMI, mas nem todos os aplicativos usam o Windows Installer. As técnicas específicas para localizar aplicativos instalados com outras ferramentas dependem do software instalador.

Por exemplo, aplicativos instalados ao copiar os arquivos para uma pasta do computador, geralmente não podem ser gerenciados por meio das técnicas discutidas aqui. É possível gerenciar esses aplicativos como arquivos e pastas, usando as técnicas discutidas em Como trabalhar com arquivos e pastas.

Para software instalado usando um pacote instalador, o Windows Installer pode ser encontrado usando as classes Win32Reg_AddRemovePrograms ou Win32_Product. No entanto, ambos têm problemas. O Win32Reg_AddRemovePrograms só estará disponível se você estiver usando o SCCM (System Center Configuration Manager). E a classe Win32_Product pode ser lenta e tem efeitos colaterais.

Cuidado

A classe Win32_Product não é otimizada para consulta. Consultas que usam filtros curinga fazem com que o WMI use o provedor MSI para enumerar todos os produtos instalados e, em seguida, analisar a lista completa em sequência para lidar com o filtro. Isso também inicia uma verificação de consistência dos pacotes instalados, verificando e reparando a instalação. A validação é um processo lento e pode resultar em erros nos logs de eventos. Para obter mais informações, confira o artigo da base de dados de conhecimento 974524.

Este artigo apresenta um método alternativo para localizar o software instalado.

Consultar a chave do Registro de desinstalação para localizar o software instalado

Como a maioria dos aplicativos padrão registra um desinstalador com o Windows, podemos trabalhar com eles localmente, localizando-os no Registro do Windows. Não há uma forma garantida de localizar todos os aplicativos em um sistema. No entanto, é possível encontrar todos os programas com listagens exibidas em Adicionar ou Remover Programas na seguinte chave do Registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall.

Podemos encontrar o número de aplicativos instalados contando o número de chaves do Registro:

$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
(Get-ChildItem -Path $UninstallPath).Count
459

Podemos pesquisar mais nessa lista de aplicativos usando uma variedade de técnicas. Para exibir os valores das entradas do Registro nas chaves do Registro em Uninstall, use o método GetValue() das chaves do Registro. O valor do método é o nome da entrada do registro. Por exemplo, para localizar os nomes de exibição dos aplicativos na chave Uninstall, use o seguinte comando:

Get-ChildItem -Path $UninstallPath |
    ForEach-Object -Process { $_.GetValue('DisplayName') } |
    Sort-Object

Observação

Não há nenhuma garantia de que os valores de DisplayName sejam exclusivos.

O exemplo a seguir produz uma saída semelhante à classe Win32Reg_AddRemovePrograms:

Get-ChildItem $UninstallPath |
    ForEach-Object {
        $ProdID = ($_.Name -split '\\')[-1]
        Get-ItemProperty -Path "$UninstallPath\$ProdID" -ea SilentlyContinue |
        Select-Object -Property DisplayName, InstallDate, @{n='ProdID'; e={$ProdID}}, Publisher, DisplayVersion
} | Select-Object -First 3

Para simplificar, este exemplo usa Select-Object para limitar o número de itens retornados a três.

DisplayName    : 7-Zip 22.01 (x64)
InstallDate    :
ProdID         : 7-Zip
Publisher      : Igor Pavlov
DisplayVersion : 22.01

DisplayName    : AutoHotkey 1.1.33.10
InstallDate    :
ProdID         : AutoHotkey
Publisher      : Lexikos
DisplayVersion : 1.1.33.10

DisplayName    : Beyond Compare 4.4.6
InstallDate    : 20230310
ProdID         : BeyondCompare4_is1
Publisher      : Scooter Software
DisplayVersion : 4.4.6.27483