Compartilhar via


Segurança da ação personalizada

O instalador executa ações personalizadas com privilégios de usuário por padrão para limitar o acesso das ações personalizadas ao sistema. O instalador poderá executar ações personalizadas com privilégios elevados se um aplicativo gerenciado estiver sendo instalado ou se a política do sistema tiver sido especificada para privilégios elevados.

Você deve usar a propriedade MsiHiddenProperties e msidbCustomActionTypeHideTarget para evitar o registro em log de informações confidenciais usadas pela ação personalizada. Para saber mais sobre msidbCustomActionTypeHideTarget, confira Opção de destino oculto da ação personalizada.

Desmarque a propriedade CustomActionData depois de defini-la para garantir que os dados confidenciais não estejam mais disponíveis. O código de exemplo abaixo é um snippet usado por uma ação personalizada de DLL imediata que está configurando dados para uso por uma ação personalizada adiada chamada "MyDeferredCA":

#include <windows.h>
#include <Msiquery.h>
#pragma comment(lib, "msi.lib")

UINT __stdcall MyImmediateCA(MSIHANDLE hInstall)
{
    // set up information for deferred custom action called MyDeferredCA
    const TCHAR szValue[] = TEXT("data");
    UINT uiStat = ERROR_INSTALL_FAILURE;
    if (ERROR_SUCCESS == MsiSetProperty(hInstall, TEXT("MyDeferredCA"), szValue))
    {
        uiStat = MsiDoAction(hInstall, TEXT("MyDeferredCA"));

        // clear CustomActionData property
        if (ERROR_SUCCESS != MsiSetProperty(hInstall, TEXT("MyDeferredCA"), TEXT("")))
            return ERROR_INSTALL_FAILURE;
    }

    return (uiStat == ERROR_SUCCESS) ? uiStat : ERROR_INSTALL_FAILURE;    
}

Observe que somente ações personalizadas de execução adiada podem usar o atributo msidbCustomActionTypeNoImpersonate. Para saber mais, confira Opções de execução de In-Script de ação personalizada.

Se o bit msidbCustomActionTypeNoImpersonate não estiver definido para uma ação personalizada, o instalador executará a ação personalizada com privilégios de nível de usuário. Para saber mais, confira Opções de execução de In-Script de ação personalizada.

Se o bit msidbCustomActionTypeNoImpersonate estiver definido e um aplicativo gerenciado estiver sendo instalado com permissão de administrador, o instalador poderá executar a ação personalizada com privilégios elevados. No entanto, se um usuário tentar instalar o aplicativo gerenciado sem permissão de administrador, o instalador executará o aplicativo com privilégios de nível de usuário, independentemente de msidbCustomActionTypeNoImpersonate estar definido.

Observe que uma ação personalizada pode ser executada com privilégios do sistema mesmo quando o bit msidbCustomActionTypeNoImpersonate não estiver definido. Isso ocorrerá se um administrador instalar o aplicativo para todos os usuários em um servidor que executa o serviço de função Servidor de Terminal usando o Windows 2000 e a ação não estiver marcada com msidbCustomActionTypeTSAware. Uma ação personalizada também poderá ser executada com privilégios do sistema se a instalação for invocada quando não houver contexto de usuário. Por exemplo, se não houver nenhum usuário conectado no momento durante uma instalação invocada pela Implantação de Aplicativos do Windows 2000.

Ao criar suas próprias ações personalizadas, você sempre deve criar a ação personalizada usando métodos seguros. Para obter informações relacionadas, confira Diretrizes para proteger ações personalizadas.