Como usar o Windows Installer para inventariar produtos e patches

Usuários e aplicativos com privilégios administrativos podem usar as funções do Windows Installer para inventariar os aplicativos, recursos, componentes e patches do Windows Installer instalados no sistema.

A partir do Windows Installer 3.0, usuários e aplicativos com privilégios de administrador podem enumerar os aplicativos, recursos, componentes e patches do Windows Installer instalados no sistema por todos os usuários. Administradores e aplicativos podem obter informações sobre um produto ou patch de um usuário específico ou todos os usuários no sistema. Os aplicativos podem obter o estado do recurso ou o estado do componente de um usuário específico.

As funções de inventário disponíveis a partir do Windows Installer 3.0 podem limitar o escopo dos itens a serem encontrados pelo contexto de instalação e pelo contexto de usuário. Há três contextos de instalação possíveis: por usuário, por computador e por usuário gerenciado. O contexto do usuário pode ser um usuário específico ou todos os usuários no sistema.

As versões das funções de inventário do Windows Installer anteriores ao Windows Installer 3.0 só podem enumerar itens instalados no sistema no contexto de computador ou no contexto por usuário do usuário atual. Essa limitação impede um inventário completo de todos os produtos e patches do Windows Installer instalados no sistema por usuários diferentes do usuário atual.

Como enumerar produtos

Use a função MsiEnumProductsEx para enumerar os aplicativos do Windows Installer instalados no sistema. Essa função pode encontrar todas as instalações por computador e instalações por usuário dos aplicativos (gerenciados e não gerenciados) do usuário atual e de outros usuários no sistema. Use o parâmetro dwContext para especificar o contexto de instalação a ser encontrado. Você pode especificar qualquer contexto ou qualquer combinação dos possíveis contextos de instalação. Use o parâmetro szUserSid para especificar o contexto de usuário dos aplicativos a serem encontrados.

Como enumerar patches

Use a função MsiEnumPatchesEx para localizar os patches aplicados a um aplicativo. Essa função pode encontrar os patches aplicados a um aplicativo específico ou a todos os aplicativos no sistema. Essa função pode encontrar os patches aplicados a todas as instalações por computador e instalações por usuário dos aplicativos (gerenciados e não gerenciados) do usuário atual e de outros usuários no sistema.

Você pode usar o contexto de instalação e o contexto de usuário para restringir a enumeração de patch a um contexto específico ou em todos os contextos. Use o parâmetro dwContext para especificar o contexto de instalação a ser encontrado. Você pode especificar qualquer contexto ou qualquer combinação dos possíveis contextos de instalação. Use o parâmetro szUserSid para especificar o contexto de usuário dos aplicativos a serem encontrados.

Para enumerar os patches aplicados a todos os produtos anunciados ou instalados por todos os usuários no sistema

  • Chame a função MsiEnumPatchesEx.
    • Use NULL para o valor do parâmetro szProductCode.
    • Use "s-1-1-0" para o valor do parâmetro szUserSid.
    • Use "MSIINSTALLCONTEXT_ALL" para o valor do parâmetro dwContext.

Para enumerar os patches aplicados a todos os produtos anunciados ou instalados por todos os usuários no sistema

  1. Chame a função MsiEnumProductsEx.

    • Use NULL para o valor do parâmetro szProductCode.
    • Use "s-1-1-0" para o valor do parâmetro szUserSid.
    • Use "MSIINSTALLCONTEXT_ALL" para o valor do parâmetro dwContext.

    A função fornece um código do produto, contexto de usuário e contexto de instalação para cada aplicativo encontrado.

  2. Para cada aplicativo enumerado na etapa 1, chame MsiEnumPatchesEx para enumerar os patches.

    Use os códigos do produto, contextos de usuário e contextos de instalação obtidos em MsiEnumProductsEx para os valores de szProductCode, szUserSid e dwContext e cada chamada de função de MsiEnumProductsEx .

Como obter informações sobre o produto

Use a função MsiGetProductInfoEx para obter informações sobre os aplicativos anunciados ou instalados no sistema e as propriedades que podem ser recuperadas. Essa função pode obter informações para uma instância de um aplicativo instalado em uma conta de usuário diferente do usuário atual, mas não pode consultar uma instância de um produto anunciado em um contexto não gerenciado por usuário para uma conta de usuário diferente do usuário atual.

Você pode especificar o contexto de instalação e o contexto de usuário para restringir as informações para os aplicativos instalados em um contexto específico. Use o parâmetro dwContext para especificar o contexto de instalação a ser encontrado. Você pode especificar apenas um dos possíveis contextos de instalação. Use o parâmetro szUserSid para especificar o contexto de usuário dos aplicativos a serem encontrados.

Como obter informações sobre o patch

Um aplicativo pode chamar a função MsiGetPatchInfoEx para consultar informações sobre a aplicação de um patch para uma instância especificada de um produto. Propriedades como LocalPackage, Transforms e State podem ser recuperadas usando essa função. Nem todos os valores de propriedade estarão disponíveis para aplicativos não gerenciados por usuário, se o usuário não estiver conectado ao computador no momento. Você pode especificar apenas um dos possíveis contextos de instalação.

Você pode especificar o contexto de instalação e o contexto de usuário para restringir as informações para os patches aplicados aos aplicativos instalados em um contexto específico. Use o parâmetro dwContext para especificar o contexto de instalação a ser encontrado. Você pode especificar apenas um dos possíveis contextos de instalação. Use o parâmetro szUserSid para especificar o contexto de usuário dos aplicativos a serem encontrados.

Como obter informações sobre estado o do componente

Os aplicativos podem chamar a função MsiQueryComponentState para obter o estado instalado de um componente. Essa função determina se o componente está instalado localmente ou instalado para ser executado na origem. A função pode consultar um componente de uma instância de um aplicativo instalado em contas de usuário diferentes do usuário atual, desde que o produto não seja anunciado no contexto não gerenciado por usuário para uma conta de usuário diferente do usuário atual.

Você pode especificar um contexto de instalação e um contexto de usuário para obter o estado dos componentes para os aplicativos instalados em um contexto específico. Use o parâmetro dwContext para especificar o contexto de instalação a ser encontrado. Você pode especificar apenas um dos possíveis contextos de instalação. Use o parâmetro szUserSid para especificar o contexto de usuário dos aplicativos a serem encontrados.

Como obter informações sobre o estado do recurso

Os aplicativos podem chamar a função MsiQueryFeatureStateEx para obter o estado instalado para um recurso de produto. Essa função determina se o recurso foi anunciado, instalado localmente ou instalado para ser executado na origem. A função pode ser usada para consultar qualquer recurso de uma instância de um aplicativo instalado na conta do computador ou em qualquer contexto na conta de usuário atual ou no contexto gerenciado por usuário em qualquer conta de usuário diferente do usuário atual. Essa função não pode consultar um aplicativo instalado no contexto não gerenciado por usuário para uma conta de usuário diferente do usuário atual. Você pode especificar apenas um dos possíveis contextos de instalação.

Você pode especificar um contexto de instalação e um contexto de usuário para obter o estado dos recursos para os aplicativos instalados em um contexto específico. Use o parâmetro dwContext para especificar o contexto de instalação a ser encontrado. Você pode especificar apenas um dos possíveis contextos de instalação. Use o parâmetro szUserSid para especificar o contexto de usuário dos aplicativos a serem encontrados.