Condividi tramite


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 di destinazione nascosta azione personalizzata.

Deselezionare la proprietà CustomActionData dopo averla impostata 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 per l'uso da parte di 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 azioni personalizzate di esecuzione posticipata possibile usare l'attributo msidbCustomActionTypeNoImpersonate. Per altre informazioni, vedere 'azione personalizzata In-Script opzioni di esecuzione.

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

Se il msidbCustomActionTypeNoImpersonate bit è impostato e viene installata un'applicazione gestita con 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 autorizzazione di amministratore, il programma di installazione esegue l'applicazione con privilegi a livello di utente indipendentemente dal fatto che sia impostato msidbCustomActionTypeNoImpersonate.

Si noti che un'azione personalizzata può essere eseguita con privilegi di sistema anche quando il msidbCustomActionTypeNoImpersonate bit non è impostato. Ciò si verifica se un amministratore installa l'applicazione per tutti gli utenti in un server che esegue il servizio ruolo Terminal Server 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 durante un'installazione richiamata da Windows 2000 Application Deployment non è attualmente presente alcun utente connesso.

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