Seguridad de acciones personalizadas
El instalador ejecuta acciones personalizadas con privilegios de usuario de forma predeterminada para limitar el acceso de acciones personalizadas al sistema. El instalador puede ejecutar acciones personalizadas con privilegios elevados si se instala una aplicación administrada o si se ha especificado la directiva del sistema para privilegios elevados.
Debe usar la propiedad MsiHiddenProperties y msidbCustomActionTypeHideTarget para evitar el registro de información confidencial que ha utilizado la acción personalizada. Para obtener más información sobre msidbCustomActionTypeHideTarget, vea Opción de destino oculto de acción personalizada.
Borre la propiedad CustomActionData después de establecerla para asegurarse de que los datos confidenciales ya no están disponibles. El código de ejemplo siguiente es un fragmento de código que usa una acción personalizada de DLL inmediata que configura los datos para que lo use una acción personalizada aplazada denominada "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;
}
Tenga en cuenta que solo las acciones personalizadas de ejecución aplazada pueden usar el atributo msidbCustomActionTypeNoImpersonate. Para obtener más información, vea Opciones de ejecución en script de acción personalizada.
Si el bit msidbCustomActionTypeNoImpersonate no está establecido para una acción personalizada, el instalador ejecuta la acción personalizada con privilegios de nivel de usuario. Para obtener más información, vea Opciones de ejecución en script de acción personalizada.
Si se establece el bit msidbCustomActionTypeNoImpersonate y se instala una aplicación administrada con permiso de administrador, el instalador puede ejecutar la acción personalizada con privilegios elevados. Pero si un usuario intenta instalar la aplicación administrada sin permiso de administrador, el instalador ejecuta la aplicación con privilegios de nivel de usuario independientemente de si msidbCustomActionTypeNoImpersonate está establecido.
Tenga en cuenta que una acción personalizada se puede ejecutar con privilegios del sistema incluso cuando el bit msidbCustomActionTypeNoImpersonate no está establecido. Esto ocurre si un administrador instala la aplicación para todos los usuarios de un servidor que ejecuta el servicio de rol de Terminal Server con Windows 2000 y la acción no está marcada con msidbCustomActionTypeTSAware. Una acción personalizada también se puede ejecutar con privilegios del sistema si se invoca la instalación cuando no hay ningún contexto de usuario. Por ejemplo, si no hay ningún usuario que haya iniciado sesión actualmente durante una instalación que invoca la implementación de aplicaciones de Windows 2000.
Al crear sus propias acciones personalizadas, siempre debe crear la acción personalizada mediante métodos seguros. Para obtener más información, vea Directrices para proteger acciones personalizadas.