Sicurezza delle azioni personalizzate

Il programma di installazione esegue azioni personalizzate con privilegi utente per impostazione predefinita per limitare l'accesso alle azioni personalizzate al sistema. Il programma di installazione può eseguire azioni personalizzate con privilegi elevati se viene installata un'applicazione gestita o se i criteri di sistema sono stati specificati per privilegi elevati.

È consigliabile usare la proprietà MsiHiddenProperties e msidbCustomActionTypeHideTarget per impedire la registrazione delle informazioni riservate usate dall'azione personalizzata. Per altre informazioni su msidbCustomActionTypeHideTarget , vedere Opzione destinazione nascosta azione personalizzata.

Deselezionare la proprietà CustomActionData dopo l'impostazione per assicurarsi che i dati sensibili non siano più disponibili. Di seguito è riportato un frammento di codice usato da un'azione personalizzata DLL immediata che configura i dati da usare da un'azione personalizzata posticipata denominata "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;    
}

Si noti che solo le azioni personalizzate di esecuzione posticipata possono usare l'attributo msidbCustomActionTypeNoImpersonate . Per altre informazioni, vedere Azioni personalizzate In-Script opzioni di esecuzione.

Se il bit msidbCustomActionTypeNoImpersonate non è impostato per un'azione personalizzata, il programma di installazione esegue l'azione personalizzata con privilegi a livello di utente. Per altre informazioni, vedere Azioni personalizzate In-Script opzioni di esecuzione.

Se il bit msidbCustomActionTypeNoImpersonate è impostato e viene installata un'applicazione gestita con l'autorizzazione di amministratore, il programma di installazione può eseguire l'azione personalizzata con privilegi elevati. Tuttavia, se un utente tenta di installare l'applicazione gestita senza autorizzazioni di amministratore, il programma di installazione esegue l'applicazione con privilegi a livello di utente indipendentemente dal fatto che msidbCustomActionTypeNoImpersonate sia impostato.

Si noti che un'azione personalizzata può essere eseguita con privilegi di sistema anche quando il bit msidbCustomActionTypeNoImpersonate non è impostato. Ciò si verifica se un amministratore installa l'applicazione per tutti gli utenti in un server che esegue il servizio ruolo del server terminal usando Windows 2000 e l'azione non è contrassegnata con msidbCustomActionTypeTSAware. Un'azione personalizzata può essere eseguita anche con privilegi di sistema se l'installazione viene richiamata quando non è presente alcun contesto utente. Ad esempio, se non è attualmente presente un utente connesso durante un'installazione richiamata dalla distribuzione dell'applicazione Windows 2000.

Quando si creano azioni personalizzate, è consigliabile creare sempre l'azione personalizzata usando metodi sicuri. Per altre informazioni, vedere Linee guida per la protezione di azioni personalizzate.